簡體   English   中英

在 Nodejs 中解析嵌套的 JSON

[英]Parsing nested JSON in Nodejs

我一直在嘗試解析嵌套的 JSON 數據,下面是我的代碼

var string = '{"key1": "value", "key2": "value1", "Key3": {"key31":"value 31"}}';
var obj = JSON.parse(string);
console.log(obj.key1)
console.log(obj[0]);

這是輸出

$ node try.js 
value
undefined

為什么我的obj[0]未定義? 在這種情況下如何獲取值,以及嵌套鍵key31

現在在@SergeyK 和其他人的幫助下更新,我修改了上面的代碼如下

var string = '{"key1": "value1", "key2": "value2", "key3": {"key31":"value 31"}}';

var obj = JSON.parse(string);
var array = Object.keys(obj)

for (var i = 0; i < array.length; i++) {
    console.log(array[i], obj[array[i]]);
}

輸出如下

$ node try.js 
key1 value1
key2 value2
key3 { key31: 'value 31' }

但是對於{"key31":"value 31"}我將如何訪問密鑰key31並獲得其value 31

您只是無法通過索引訪問命名對象屬性。 您可以使用obj[Object.keys(obj)[0]]

編輯:

正如@smarx 在評論中所解釋的那樣,由於Object.keys是無序的,因此此答案不適合通過索引直接訪問特定屬性,因此僅適用於需要循環對象的鍵/值的情況。

示例:

var string = '{"key1": "value", "key2": "value1", "Key3": {"key31":"value 31"}}';
var obj = JSON.parse(string);
var keysArray = Object.keys(obj);
for (var i = 0; i < keysArray.length; i++) {
   var key = keysArray[i]; // here is "name" of object property
   var value = obj[key]; // here get value "by name" as it expected with objects
   console.log(key, value);
}
// output:
// key1 value
// key2 value1
// Key3 { key31: 'value 31' }

當您嘗試訪問時

 console.log(obj[0]);

您實際上是在嘗試在數組中的第一個內存位置引用元素,但var string是散列而不是數組。 這就是為什么你得到undefined

只有當 obj 是一個數組時, console.log(obj[0]) 才會顯示它的值。 例如:

var obj = ["value","value2"];
console.log(obj[0]) --> value

對於對象,您需要使用密鑰作為標識符。

對於嵌套鍵 key31:

console.log(obj.Key3.key31) --> value 31

希望有幫助

我不知道你想讓obj[0]做什么,所以我無能為力。

要獲取 key31 的值,請使用obj.Key3.key31 ,它在記錄時應產生value 31

console.log(obj[0]); 給出undefined因為obj is not an array obj[0]只有當 obj 是一個數組時才會起作用,因為我們正在訪問數組中的first index元素。

示例:

var obj = ["val1","val2","val3"];

console.log(obj[0]); // val1

根據要求:

var string = '{"key1": "value", "key2": "value1", "Key3": {"key31":"value 31"}}';
var obj = JSON.parse(string);
var keyArray = Object.keys(obj); // key1
console.log(obj[(keyArray[0])]); // value

工作小提琴:

https://jsfiddle.net/kbwbspnk/

對於嵌套屬性值,您必須使用. 運營商。

console.log(obj.Key3.key31); // value 31

在上述情況下,您的變量(字符串)不是其對象的數組,您無法使用像 0,1,2... 這樣的索引來訪問它,您可以使用它的鍵值名稱(如 key1,key2...)訪問它。

例如:obj['key1'] $ value obj['Key3']['key31'] $ value 31

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM