在简要介绍一下Google后,我发现这个link描述了差异,但从语法的角度来看。
在编程场景中,何时优先于另一个?
答案 0 :(得分:161)
当您在Android中使用JSON数据时,您将使用JSONArray
来解析以数组括号开头的JSON。 JSON中的数组用于组织相关项的集合(可以是JSON对象)
例如:[{"name":"item 1"},{"name": "item2} ]
另一方面,在处理以花括号开头的JSON时,您将使用JSONObject
。 JSON对象通常用于包含与一个项相关的键/值对。
例如:{"name": "item1", "description":"a JSON object"}
当然,JSON数组和对象可以互相嵌套。一个常见的例子是API,它返回一个JSON对象,其中包含一些元数据以及与您的查询匹配的项目数组:
{"startIndex": 0, "data": [{"name":"item 1"},{"name": "item2"} ]}
答案 1 :(得分:90)
差异与(哈希)地图与列表相同。
<强>的JSONObject:强>
{ID : 1}
{id: 1, name: 'B'}
的JSONObject等于{name: 'B', id: 1}
。 <强> JSONArray:强>
[1, 'value']
[1,'value']
数组与['value',1]
实施例
JSON Object --> { "":""}
JSON Array --> [ , , , ]
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
答案 2 :(得分:21)
以编程方式理解。
当语法为
{}
时,则为JsonObject
当语法为
[]
时,则为JsonArray
JSONObject
是类似JSON的对象,可以表示为JSONArray
中的元素。 JSONArray
可以包含一个(或多个)JSONObject
希望这对你有所帮助!
答案 3 :(得分:6)
我总是使用对象,它更容易扩展,JSON数组不是。例如,您最初将某些数据作为json数组,然后您需要在其上添加一个状态标题,除非您将数据嵌套在对象中,否则您将有点卡住。唯一的缺点是创建/解析的复杂性略有增加。
所以而不是
[datum0, datum1, datumN]
你有
{data: [datum0, datum1, datumN]}
然后你可以添加更多......
{status: "foo", data: [datum0, datum1, datumN]}
答案 4 :(得分:2)
为了以一种更简单的方式理解它,以下是JSON对象与JSON数组之间的区别:
链接到表格差异:https://i.stack.imgur.com/GIqI9.png
JSON数组
1. Arrays in JSON are used to organize a collection of related items
(Which could be JSON objects)
2. Array values must be of type string, number, object, array, boolean or null
3. Syntax:
[ "Ford", "BMW", "Fiat" ]
4. JSON arrays are surrounded by square brackets [].
**Tip to remember** : Here, order of element is important. That means you have
to go straight like the shape of the bracket i.e. straight lines.
(Note :It is just my logic to remember the shape of both.)
5. Order of elements is important. Example: ["Ford","BMW","Fiat"] is not
equal to ["Fiat","BMW","Ford"]
6. JSON can store nested Arrays that are passed as a value.
JSON对象
1. JSON objects are written in key/value pairs.
2. Keys must be strings, and values must be a valid JSON data type (string, number,
object, array, boolean or null).Keys and values are separated by a colon.
Each key/value pair is separated by a comma.
3. Syntax:
{ "name":"Somya", "age":25, "car":null }
4. JSON objects are surrounded by curly braces {}
Tip to remember : Here, order of element is not important. That means you can go
the way you like. Therefore the shape of the braces i.e. wavy.
(Note : It is just my logic to remember the shape of both.)
5. Order of elements is not important.
Example: { rollno: 1, firstname: 'Somya'}
is equal to
{ firstname: 'Somya', rollno: 1}
6. JSON can store nested objects in JSON format in addition to nested arrays.
答案 5 :(得分:1)
当JSON以{}开头时,它就是一个对象JSON object 当它以[]开头时,它是一个数组JOSN Array
JSON数组可以包含一个或多个对象,这称为对象数组
答案 6 :(得分:0)
我知道,所有先前的答案都对您的问题很有见识。在找到该SO线程之前一分钟,我也非常喜欢您这种困惑。在阅读了一些答案之后,我得到的是: JSONObject是类似于JSON的对象,可以表示为数组JSONArray中的元素。换句话说,JSONArray可以包含一个(或多个)JSONObject。
答案 7 :(得分:0)
两者的用法取决于您数据的结构。
简单来说, 如果您打算优先使用唯一标识符(例如主键),则可以使用嵌套对象方法。
例如:
{
"Employees" : {
"001" : {
"Name" : "Alan",
"Children" : ["Walker", "Dua", "Lipa"]
},
"002" : {
"Name" : "Ezio",
"Children" : ["Kenvey", "Connor", "Edward"]
}
}
或者, 如果您打算存储一组不需要唯一标识的值,请使用优先数组方法。
例如:
[
{
"Employees":[
{
"Name" : "Alan",
"Children" : ["Walker", "Dua", "Lipa"]
},
{
"Name" : "Ezio",
"Children" : ["Kenvey", "Connor", "Edward"]
}
]
}
]
尽管您可以将第二种方法与标识符一起使用,但在某些情况下查询和理解起来可能更难或更复杂。同样取决于数据库,可能必须应用一种合适的方法。 例如:MongoDB / Firebase