【问题标题】:Parse JSON into Object Array将 JSON 解析为对象数组
【发布时间】:2015-10-14 15:27:30
【问题描述】:

我创建了一个包含对象的数组,其中一些属性也是对象。我已成功将其转换为 JSON,需要将其转换回对象数组,或者以某种方式从 JSON 对象的正确索引中提取正确的数据。

更新

这是我通过 JSON.parse 运行它时得到的示例:

[{"Result":"Fail","Method":"T97E-v1","Beam1":{"BeamAge":"1","WidthUpper":1,"WidthCenter":1,"WidthLower":1,"WidthAverage":1,"DepthRight":1,"DepthCenter":1,"DepthLeft":1,"DepthAverage":1,"MaxLoad":1,"FS":18,"PSI":"18.00000","BreakOutside":"No"},"Beam2":{"BeamAge":"","WidthUpper":null,"WidthCenter":null,"WidthLower":null,"WidthAverage":null,"DepthRight":null,"DepthCenter":null,"DepthLeft":null,"DepthAverage":null,"MaxLoad":null,"FS":null,"PSI":"NaN"},"WaitForCuring":"No","AverageOfBeams":"NaN"}]

更新 2

这是我正在做的代码:

try {
    localStorage["flexuralStrengthSamples"] = JSON.stringify(JSON.stringify(t97Samples));
    var parsedObject = JSON.parse(localStorage["flexuralStrengthSamples"]);

    console.log(parsedObject);                    
    console.log(parsedObject[0].Beam1.MaxLoad);            
} catch (err) {
    alert(err.message);
}

【问题讨论】:

  • 好的,但是一些数据示例呢?或者也许你已经尝试过一些代码?堆栈不是询问代码的地方,而是提出具体问题的地方。
  • 也许如果您告诉我们您使用的语言,您可以帮助我们帮助您。如果您使用的是 javascript,则问题不存在,因为 JSON 是 javascript 对象的字符串序列化。所以使用 JSON.parse 你应该没问题。
  • @PanamaJack 除了失败和损坏的代码,我什么都没有。我更新以显示解析 JSON 时得到的结果。
  • 您的预期结果是什么?准确解释您期望的结果。
  • @CodyHarness,你为什么要两次stringify?一个就够了。也是简单的逻辑:如果你两次转换为字符串,那么你也应该解析两次。但无论如何,足够的电话stringify一次

标签: jquery arrays json object


【解决方案1】:

我找到了原因:在将其存储到本地存储之前,您要进行两次字符串化

try {
     localStorage["flexuralStrengthSamples"] = (JSON.stringify(t97Samples)); //Stringify only once, since localstorage values needs to be string
     var parsedObject = JSON.parse(localStorage["flexuralStrengthSamples"]); // should give the original object.


   console.log(parsedObject[0].Beam1.MaxLoad); // Since parsedObject is still string, this was failing. Now should work fine           
} catch (err) {
   alert(err.message);
}

在此处查看工作小提琴:http://jsfiddle.net/sandenay/pnb88p4s/

【讨论】:

    【解决方案2】:

    您可以使用 JSON.parse() 解析 JSON。

    更新
    这是来自JSON.parse() 的数据样本。

    [{"Result":"Fail","Method":"T97E-v1","Beam1":{"BeamAge":"1","WidthUpper":1,"WidthCenter":1,"WidthLower":1,"WidthAverage":1,"DepthRight":1,"DepthCenter":1,"DepthLeft":1,"DepthAverage":1,"MaxLoad":1,"FS":18,"PSI":"18.00000","BreakOutside":"No"}}]

    为了获取您的数据,您需要对数组使用括号表示法,对对象使用点表示法。所以,让data等于那个JSON数组,那么你可以做data[0].Result,也就是"Fail",或者data[0].Beam1.MaxLoad,也就是1

    【讨论】:

    • 我试过了。它总是给我错误“无法读取未定义的属性'MaxLoad'。”
    • data[0].Beam1.MaxLoad 在控制台中为我打印 1
    • 我添加了我的代码。似乎这个问题上的任何人以及我去过的任何其他人都可以获得输出,但我永远不能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2014-08-21
    相关资源
    最近更新 更多