[英]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.