【问题标题】:Unable to parse JSON data due to errors or undefined data由于错误或未定义的数据,无法解析 JSON 数据
【发布时间】:2020-02-23 21:43:53
【问题描述】:

如果这看起来与其他问题相似,我深表歉意,但我无法找到任何为我解决此问题的帖子。基本上,我得到一个 JSON 对象,我试图解析它,但我无法正确解析它。主要是我从 Word API 获得的 WordDetails 部分。我能够得到 WordDetails 下结果部分之外的所有内容。基本上,当我得到结果时,我无法正确解析它。以下是格式示例。

{
  "LastIndex": 133,
  "SRDWords": [
    {
      "Domain": {
        "URL": "abactinal.com",
        "Available": true
      },
      "WordDetails": "{\"word\":\"abactinal\",\"results\":[{\"definition\":\"(of radiate animals) located on the surface or end opposite to that on which the mouth is situated\",\"partOfSpeech\":null,\"antonyms\":[\"actinal\"]}],\"syllables\":{\"count\":4,\"list\":[\"ab\",\"ac\",\"ti\",\"nal\"]}}"
    },
    {
      "Domain": {
        "URL": "aaronical.com",
        "Available": true
      },
      "WordDetails": "{\"word\":\"aaronical\",\"syllables\":{\"count\":4,\"list\":[\"aa\",\"ron\",\"i\",\"cal\"]},\"pronunciation\":{\"all\":\"ɜ'rɑnɪkəl\"}}"
    },
...

下面是我的代码。基本上,我正在进入 WordDetails 的结果部分,但是如果我尝试解析结果部分,它会失败,并且如果我尝试 object.entries,它不会根据我使用的警报消息返回响应。我知道必须有更好的方法,但不确定是什么。大多数文章只说 JSON.parse 然后映射它,但这不起作用。任何帮助将不胜感激!

data.Words.map(word => {
    //get data
    for (let [key, value] of Object.entries(word)) {
        if (key === "Domain") {
            url = value.URL;
            availability = value.Available;
        } else if (key.trim() === "WordDetails") {
            alert("value " + value);
            wDetails = JSON.parse(value);

            for (let [key2, value2] of Object.entries(wDetails)) {
                if (key2 === "word") {
                    //store word
                } else if (key2.toString().trim() === "results") {
                    let test = JSON.parse(value2);
                    test = Object.entries(value2);
                    test.map(t => {
                        alert(t.definition);
                    });
                }
            }
        }
    }
});

【问题讨论】:

  • 请在“不起作用”陈述中更具体,解释您得到的错误或不希望的结果
  • 对不起,我现在看到了。我的意思是说,当我尝试在 WordDetails 的结果部分使用 Object.Entries 时,它要么不起作用,要么尝试将字符串分成字符数组。我想提取定义和同义词,但是当我解析它时,它不允许我做 test.definition。

标签: json reactjs api


【解决方案1】:

上面你做了 JSON.parse,不需要再解析value2。 结果的值是一个数组,所以不需要Object.entries

...

    } else if (key2.toString().trim() === 'results') {
      let test = JSON.parse(value2); // this should be remove
      test = Object.entries(value2); // this should be remove, value2 should be an array

      // map value2 directly
      value2.map(t => {
        alert(t.definition);
      });

    }

...

【讨论】:

  • 谢谢,有道理!那么关于 value2,我怎么知道这个属性是什么?例如,JSON 响应在 results 属性中可能有多个定义部分。我可以使用 value2.map 获取 t.definition 的值,但是如何检查每个定义属性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多