【问题标题】:Get data from JSON array within JSON array从 JSON 数组中的 JSON 数组获取数据
【发布时间】:2015-04-29 12:39:08
【问题描述】:

我正在尝试从 JSON 数组中的 JSON 数组获取数据,但收效甚微。

所以我们的服务器在一个名为“msg”的变量中返回一个 JSON 数组,当我 console.log 时它看起来像这样

[{"product":"[{\"imgUrl\":\"/p/332401\",\"prodCartQty\":2,\"prodName\":\"Test Product 1",\"productCode\":\"332401\"},{\"imgUrl\":\"/p/332388\",\"prodCartQty\":2,\"prodName\":\"Test Product 2",\"productCode\":\"332388\"}]","category":"gross_MAX_1","totalCategory":1},{"product":"[{\"imgUrl\":\"/p/332401\",\"prodCartQty\":2,\"prodName\":\"Test Product 1",\"productCode\":\"332401\"},{\"imgUrl\":\"/p/332388\",\"prodCartQty\":2,\"prodName\":\"Test Product 2",\"productCode\":\"332388\"}]","category":"gross_MAX_1","totalCategory":1}]

然后我有以下代码来提取产品名称,但不断收到未定义的错误 - Uncaught TypeError: Cannot read property 'prodName' of undefined

console.log(msg);
var data = $.parseJSON(msg);
console.log(data);

OBJ = {};
OBJ.apply = function(data) {
    $.each(data, function() {
        $.each(this, function(key, value) {
            console.log(value.product.prodName);
        });
    });
};
OBJ.apply(data);

任何想法我要去哪里错了吗?

谢谢

编辑

我查看了解析后的变量,我得到:-

[Object, Object]
0: Object
category: "restrictedItems_ie-standard-gross_MAX_1"
product: "[{"imgUrl":"/p/332401","prodCartQty":2,"prodName":"Test Product 1","productCode":"332401"},{"imgUrl":"/p/332388","prodCartQty":2,"prodName":"Test Product 2","productCode":"332388"}]"
totalCategory: 1
__proto__: Object
1: Object
category: "restrictedItems_ie-standard-gross_MAX_1"
product: "[{"imgUrl":"/p/332401","prodCartQty":2,"prodName":"Test Product 1","productCode":"332401"},{"imgUrl":"/p/332388","prodCartQty":2,"prodName":"Test Product 2","productCode":"332388"}]"
totalCategory: 1
__proto__: Object
length: 2
__proto__: Array[0]

所以数据解析得很好,但现在我需要返回产品中的数据或将产品中的对象数据获取到单独的对象中。 有任何想法吗?谢谢

【问题讨论】:

  • 你的 $.each(this, function(key, value) 没什么用,如果你只是想购买产品名
  • 你不能改变服务器响应的格式吗?在 JSON 数据中包含 JSON 数据似乎有点奇怪。
  • 您从哪个服务器端应用程序获得json 我的意思是您将从控制器操作或服务(API)获得 json?

标签: jquery arrays json


【解决方案1】:

试试这个。我必须通过转义每个结尾的引号来修复无效的 JSON

\"Test Product 1" <<<<
\"Test Product 2" <<<<

var data = [
    {
        "product": "[{\"imgUrl\":\"/p/332401\",\"prodCartQty\":2,\"prodName\":\"Test Product 1\",\"productCode\":\"332401\"},{\"imgUrl\":\"/p/332388\",\"prodCartQty\":2,\"prodName\":\"Test Product 2\",\"productCode\":\"332388\"}]",
        "category": "gross_MAX_1",
        "totalCategory": 1
    },
    {
        "product": "[{\"imgUrl\":\"/p/332401\",\"prodCartQty\":2,\"prodName\":\"Test Product 1\",\"productCode\":\"332401\"},{\"imgUrl\":\"/p/332388\",\"prodCartQty\":2,\"prodName\":\"Test Product 2\",\"productCode\":\"332388\"}]",
        "category": "gross_MAX_1",
        "totalCategory": 1
    }
]



$.each(data,function(_,productArr) {
  var arr = JSON.parse(productArr.product.replace(/\//g,""));
  $.each(arr,function(_,productDetails) {
    // here is a product detail object
    $.each(productDetails,function(name,value) {
      console.log(name,value);
    });
  });
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 嗨,服务器返回的 json 里面有另一个 json 数组,我被告知这是服务器必须返回的方式。我如何处理服务器返回的内容?我需要从对象的产品部分获取信息。
  • 有没有办法只从对象中获取产品数组?
  • 您好,谢谢。我现在已经获得了我可以使用的格式的数据。顶级人物。
【解决方案2】:

看起来应该是unescaped

如果您将 JSON 粘贴到 this JSON formatter 之类的工具中,您将能够更清楚地看到它与 \s 的不同之处。

【讨论】:

  • 查看我的原始变量,解析后得到:
猜你喜欢
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多