如何提取json对象内的json对象

时间:2012-04-28 22:37:12

标签: javascript json

转换它:

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3},
          ...    
          {"id":"BLE10-A0-123-321","weight":"100","quantity":4}],
"country":"JUS",
"region":"A",
...
"timeout":"FILLER"}

对此:

{"BLE89-A0-123-384": "3", "BLE10-A0-123-321": "4"}即... {id:quantity}

我找到的答案几乎可以满足我的需求:Searching for an Object inside the JSON。但是这个答案对我没有帮助,因为它只在第一级(一个json对象)。我的问题是在第二级(json对象中的json对象)。提前谢谢!

3 个答案:

答案 0 :(得分:28)

如果您不将JSON对象视为JSON对象,则会有所帮助。通过JSON.parse运行JSON字符串后,它就是一个本机JavaScript对象。

在JavaScript中,有两种方法可以访问对象。

点符号

点符号就像这样

myObject.name

看点?您可以使用它来访问任何对象 property (实际上它可能是javascript中的另一个对象,只要它具有有效的点符号名称)。您不能使用-.和空格字符等字符。

括号表示法(可能是其他名称)

myObject["variableName"]

像点符号一样但允许其他一些字符,例如-和空格字符。完全相同的事情。

使用这些表示法非常有用,因为我们可以访问嵌套属性。

myObj.foo.bar.baz()

现在让我们来看看你的JSON对象......

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3,"stock":0},
{"id":"BLE10-A0-123-321","weight":"100","quantity":4,"stock":0}],

您可能想要自己了解JSON format,但在您的示例中,这里有一些线索......

{表示对象的开始。 (请记住,整个JSON字符串本身就是一个对象。)

}表示对象的结束。

"variable"(带引号!在JSON中很重要,但在访问/声明javascript对象时却没有)为您的对象分配属性。

:是JSON和JavaScript对象中的赋值运算符。 :右侧的任何内容都是您在左侧分配给该属性的值。

,表示您在对象中启动新属性。

您可能知道[]里面带有,逗号的JSON.parse(string)表示数组。

当我们通过var myResponse = JSON.parse(response);运行您的字符串时,我们会得到一个看起来像这样的对象......

var items = myResponse.items; //alternatively you could just use myResponse.items

您现在可以将其用作本机JavaScript对象。您正在寻找的是“项目”中的嵌套属性。

items

由于var i; var result = {} ; //declare a new object. for (i = 0; i < items.length; i++) { var objectInResponse = items[i]; //get current object var id = objectInResponse.id; //extract the id. var quantity = objectInResponse.quantity; result[id] = quantity; //use bracket notation to assign "BLE89-A0-123-384" //instead of id. Bracket notation allows you to use the value // of a variable for the property name. 是一个对象数组,我们需要迭代它才能将现有对象转换为新对象。

{
    "BLE89-A0-123-384" : 3, //additional properties designated by comma
    "BLE10-A0-123-321" : 4 // The last key/value in an object literal CANNOT
    // have a comma after it!
}

结果现在是一个看起来像这样的对象:

var BLE89 = result["BLE10-A0-123-321"]; //use quotes, otherwise JavaScript will try to look up the value of a variable.

您可以使用括号表示法访问属性。

{{1}}

答案 1 :(得分:2)

您可以尝试:

var obj = {
    "items":[
        {"id":"BLE89-A0-123-384","weight":"100","quantity":3},
        {"id":"BLE10-A0-123-321","weight":"100","quantity":4}
    ],
    "country":"JUS",
    "region":"A",
    "timeout":"FILLER"
};

var quantities = {};
obj.items.forEach(function (item) {
    quantities[item.id] = item.quantity;
});

quantities将成为对象{"BLE89-A0-123-384":3,"BLE10-A0-123-321":4}forEach是JavaScript中的数组对象的本机方法,可让您遍历其元素。您可能希望将该段代码放在函数中:

function getQuantities(obj) {
    var quantities = {};
    obj.items.forEach(function (item) {
        quantities[item.id] = item.quantity;
    });
    return quantities;
}

答案 2 :(得分:0)

您需要执行以下操作:


var newJSON = {};
for (var i = 0; i < oldJSON.items.length; i++) {
  newJSON[oldJSON.items[i].id] = oldJSON.items[i].quantity;
}