换句话说,对象文本在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