API 对象变为字符串 - JSON 中的意外标记 o

Posted

技术标签:

【中文标题】API 对象变为字符串 - JSON 中的意外标记 o【英文标题】:API object turns to string - Unexpected token o in JSON 【发布时间】:2020-02-28 17:44:05 【问题描述】:

查看过类似的堆栈溢出答案,但无法弄清楚这一点。

我正在进行 API 调用,它肯定会返回一个对象。 当我遍历我的数据并将其注入 DOM 时,它会显示为一个字符串。

所以当我返回 JSON.parse(data) 我的数据时,它会返回以下错误:

Uncaught (in promise) SyntaxError: Unexpected token o in JSON at position 1

我知道,这是因为数据已经变成了字符串,但我没有在任何地方变成字符串。

基本上,我不希望我的elem.largeImageURL 被作为字符串注入。

这是我的完整 JS 代码。不知道我做错了什么?

function PixabayAPIService() 
const searchURL = 'https://pixabay.com/api/';
const apikey    = 'MY_API_KET';

function getImages(carouselContainer) 
  fetch(`$searchURL?key=9656065-$apikey&q=beautiful+landscape&image_type=photo&page=1&per_page=6`)
    .then((res) => 
      return res.json();
    )
    .then((data) => 
      console.log('data', data);   //HERE TYPEOF DATA IS OBJECT

      let result = '';
      data.hits.forEach(elem => 

        console.log(typeof elem.largeImageURL);  //HERE TYPEOF IS STRING
        result +=
                `<div class="item"><img src="$elem.largeImageURL" /></div>`;
        carouselContainer.append(result);
      );
    );


return 
  getImages
;

以下是我的 console.logs 的外观:

app.js loaded
count 0

data totalHits: 500, hits: Array(6), total: 
7781hits: (6) […, …, …, …, …, …]total: 7781totalHits: 
500__proto__: Object

object
string

以下是 DOM 的返回方式 - 模板文字作为字符串注入:

https://i.imgur.com/JfQRxKk.png

【问题讨论】:

你正在尝试解析一个可能是 [object Object] 的字符串 - 因为 fetch ... res.json() 返回一个 object 不需要 JSON.parse它 - 但是,您显示的代码不包括 JSON.parse(data) - 那么您显示的代码如何产生该错误? 为什么您希望 elem.largeImageURL 不是字符串。我认为应该是一个字符串。 我看到了问题...element.append(result) ...阅读documentation ...它不像jQuery append() 不需要 html 字符串。它需要 Dom 元素。例如您可以使用 document.createElement("div") 创建一个 div 编辑:As @Brav @ReenaVerma “对象变成字符串”在哪里? 【参考方案1】:

当使用element.append 时,它确实接受一个字符串,但它不会将该字符串解释为 HTML - 它只是将该字符串作为文本节点附加到元素中

你会想要这样的东西:

function PixabayAPIService() 
    const searchURL = 'https://pixabay.com/api/';
    const apikey = 'MY_API_KET';

    function getImages(carouselContainer) 
        fetch(`$searchURL?key=9656065-$apikey&q=beautiful+landscape&image_type=photo&page=1&per_page=6`)
        .then((res) => 
            return res.json();
        )
        .then((data) => 
            data.hits.forEach(elem => 
                // change from here
                let result = document.createElement('div');
                result.classList.add('item');
                result.innerHTML = `<img src="$elem.largeImageURL" />`;
                // to here
                carouselContainer.append(result);
            );
        );
    

    return 
        getImages
    ;

【讨论】:

= 非常感谢 Bravo!我没有意识到 append 会以这种方式误解。以前,我使用 innerHTML,它通常可以正常工作。那为什么我没有注意到这一点。谢谢!!!!!! mis-interpret - 不,这不是对任何东西的误解,这就是函数的工作原理:p Okie dokes - 一定会记住这一点的,哈哈 :)

以上是关于API 对象变为字符串 - JSON 中的意外标记 o的主要内容,如果未能解决你的问题,请参考以下文章

位置 0 处 JSON 中的意外标记 J

显示图像时 Object.parse 位置 0 处 JSON 中的意外标记

JSON 中位置 0 处的意外标记 u

如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b

Newtonsoft.Json.JsonSerializationException:'反序列化对象时出现意外标记:使用动态对象注释

如何修复SyntaxError:位于0的JSON中的意外标记b