【问题标题】:Data Objects from $.ajax with json are shallow [duplicate]来自 $.ajax 和 json 的数据对象很浅[重复]
【发布时间】:2017-11-09 08:05:11
【问题描述】:

我的 JSON 看起来像这样(设计可能有误)

{
  "Supermarkt": {
    "name": "Supermarkt",
    "translations": {
      "trolley": "Einkaufswagen",
      "vegetables": "Gemüse",
      "cocoa": "Kakao",
      "chocolate": "Schokolade"
    },
    "pronunciations": []
  },
  "Script1336Kidee": {
    "name": "Script1336Kidee",
    "translations": {
      "Trojaner": "RAT",
      "Laufzeit-Packer": "Magie",
      "PHP": "Der letzte Dreck",
      "JavaScript": "Wild-West"
    },
    "pronunciations": []
  }
}

我通过 ajax 调用得到的(已经通过 dataType: "json" $.ajax 选项进行 JSON 解码):

let lessonCall = $.ajax("https://www2.htw-dresden.de/~s70357/vokabel.php/",{dataType: "json"});
lessonCall.fail((jqXHR, status, error) => {
    console.log(status);
    console.log(error);
});
lessonCall.done((data,status) => {
    console.log(status);
    console.log(data);
    for (let lesson in data){
        console.log(lesson);
        console.log(lesson.name);
    }
});

问题lesson.name未定义虽然console.log(data);显示健康的数据对象和健康的子子对象,但教训似乎只是一个类似字符串的东西。

如何遍历我的"name"s?!

【问题讨论】:

  • lesson 是属性名称而不是值,每个 this
  • @James 那么我该如何解决呢?
  • 如何从对象中获取属性值,将属性名称包含在变量中? obj[propertyName].
  • 是的,我没有意识到我正在尝试lesson["name"] 的“数组级别”操作,但它从来没有想过,因为我只是得到了索引。 Javascript 初学者,对不起,但谢谢!

标签: javascript jquery json ajax ecmascript-6


【解决方案1】:

试试这个:

for (let i in data){
    let lesson = data[i];
    console.log(lesson);
    console.log(lesson.name);
}

【讨论】:

    【解决方案2】:

    您是否尝试在for 循环之前调用let jsonData = JSON.parse(data)

    你能修改json格式吗?如果是这样,你可以把它变成一个数组:

    [   
      {
        "name": "Supermarkt",
        "translations": {
          "trolley": "Einkaufswagen",
          "vegetables": "Gemüse",
          "cocoa": "Kakao",
          "chocolate": "Schokolade"
        },
        "pronunciations": []   
      },   
      {
        "name": "Script1336Kidee",
        "translations": {
          "Trojaner": "RAT",
          "Laufzeit-Packer": "Magie",
          "PHP": "Der letzte Dreck",
          "JavaScript": "Wild-West"
        },
        "pronunciations": []   
      } 
    ]
    

    【讨论】:

    • 是的,然后我得到了预期的解析错误,因为它已经被 $.ajax 解析:Uncaught SyntaxError: Uncaught SyntaxError: Unexpected token o in JSON at JSON.parse () at Object.lessonCall .done (vokabeltrainer.js:31) at i (jquery.min.js:2) at Object.fireWith [as resolveWith] (jquery.min.js:2) at A (jquery.min.js:4) at XMLHttpRequest .
    • console.log(lesson); 显示什么?
    • 只是SupermarktScript1336Kidee(正如詹姆斯指出的那样,只是属性名称而不是值)。 Michał Perłakowski 的答案有效,我想它在另一个数组中,我还没有得到整个 javascript“类型系统”。但是谢谢你的尝试!
    • 酷。没问题!我还发布了另一种 json 格式,如果您有权修改它,您可以尝试,因为您提到“(设计可能错误)”
    • @Eriv B 有趣,我有这种格式,但是 IIRC 会给你解析错误,因为它不是合法的 json。 (整个事情都是顶级的)
    猜你喜欢
    • 2016-06-16
    • 2017-10-10
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多