換句話說,對象文本在JavaScript中,如{a: 1}
,或它定義了對象,是不 JSON,也永遠不會是JSON,將它引用爲JSON或作爲「JSON對象」是不正確的 - 這是一種甚至不存在於世界中的事物,並且不能,因爲JSON是一個字符串。一個JavaScript中的對象被稱爲一件事:一個JavaScript對象,或者如果上下文清楚,只需對象(如果您想知道,它也永遠不會被稱爲「散列」或「字典」或「關聯數組」)。這樣的JavaScript對象可能是從服務器獲取的JSON中獲得的,或者它可能註定要最終轉換成JSON發送到服務器,甚至可能存儲在名爲jsonObj
的變量中以提醒我們它的起源或它的目的地,但仍然不會讓它成爲JSON。它是一個JavaScript對象。
術語「解析」在計算機科學中具有非常具體的含義。它意味着根據一些語法或語法來分析一些輸入,通常是一個字符串,並且將其轉換成某種解析表示。維基百科說:
解析是分析一串符合正式語法規則的符號的過程。
JavaScript對象不需要被解析。它已經是一個JavaScript對象的形式。您可以直接訪問屬性,其基本語法爲object.property
或object["property"]
。訪問像這樣的屬性是而不是解析,並且不應該被稱爲解析。
解析是適用於JSON的東西,當該術語用於正確的意義上,即字符串的意義。我們根據JSON語法規則解析字符串,以創建一個解析後的表示,對於JavaScript,它將是一個JavaScript對象。這是JSON.parse
所做的。當然JSON.stringify
的方向相反。
在JavaScript編程的正常過程中,您實際上會發現相對較少的情況,您需要擔心JSON,解析或字符串化。如果您確實發現自己擔心這些事情,那麼您可能會誤解有關您的數據或工具的內容。大多數用於從服務器檢索數據的API會自動將服務器提供的JSON轉換爲JavaScript對象,爲您提供已經解析並可以直接訪問的內容。大多數用於將數據傳遞到服務器的API將自動將您提供的JavaScript對象轉換爲JSON。在任何情況下,您都不必擔心解析或字符串化,除了可能確保在XHR對象上指定某些選項(如responseType: json
)之外。如果您將JavaScript對象存儲在「本地存儲」中,則可能需要擔心解析和字符串化,因爲本地存儲按定義存儲字符串。
我想打印出所有args
元素[原文如此],然後將它們分開[sic]。這是我做的解析json元素,我能夠得到op
或collection
元素。不過,我並沒有得到args
元素。
我知道不是每個人都是母語爲英語的人,但是很難理解這句話。我想你的意思是「打印出所有元素(複數)args
」。我不知道你的意思是「分開分開」。你的意思是一個接一個地處理元素嗎?我也不知道你的意思是什麼「這是我做的解析json元素」。這是避免錯誤地使用諸如「parse」和「json」之類的術語的完美例子;你只是迷惑自己和其他人。
如果你所說的是要通過一個在覆蓋着每一個基本JS教程和數組元素介紹到打印出args
財產之一元素,順便循環:
const config = { args: [{ "a": 1 }, { "b": 2 }, { "c": 3 }] };
for (const elt of config.args) console.log(elt);
的for...of
形式,如果你不知道的是你一定要學會,遍歷數組中的元素。
或者,當然你也可以在指數數組,從0
高達config.args.length
使用常規for
迴路循環。
但是,如果您想按屬性細分{"a": 1}
屬性,並且逐個打印每個屬性及其值? (當你說「分開分開」時,這可能意味着什麼?)在這種情況下,我們需要一種方法來查找所有屬性,假設我們不提前知道它們。查找一個對象的屬性在任何JS介紹中都會很早涉及到,所以我們並不需要詳細介紹這些細節,但是我們來編寫一個函數來打印出所有對象的屬性及其值:
function printObjectPropertiesAndValues(object) {
}
我們可以在代碼中使用此之上,如下所示:
for (const elt of config.args) printObjectPropertiesAndValues(elt);
因爲我們只是調用一個函數現在每個元素上,有些人可能更願意使用map
:
config.args.map(printObjectPropertiesAndValues);
你應該確保你明白上面的行和它是如何工作的。
無論如何,我們該怎麼寫printObjectPropertiesAndValues
?有幾種方法。其他答案中有一些想法。一種方法是使用for...in
語句,該語句循環訪問某個對象的屬性。
function printObjectPropertiesAndValues(object) {
for (const prop in object) console.log("property", prop, "has value", obj[prop]);
}
你也應該確保你理解上面的代碼做什麼,並且特別是什麼obj[prop]
手段,以及爲什麼它的工作原理。
嘗試'console.log(「arg is」,config.args);'改爲,或'console.log(「arg is」,JSON.stringify(config.args));' –
config.args是一個對象數組,如果你想要console.log這些,你需要逐個遍歷config.args ..*'我也嘗試過使用stringfy方法,但它沒有工作。* *你做錯了,那麼 –
或'console.log(「arg is」,[] .concat(... config.args.map(Object.values )))' – trincot