Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基本的类似JSON的对象结构?_Javascript_Python_Json_Schema - Fatal编程技术网

Javascript 基本的类似JSON的对象结构?

Javascript 基本的类似JSON的对象结构?,javascript,python,json,schema,Javascript,Python,Json,Schema,如何在类似JSON的对象中正确存储数据?据我所见,在json对象中存储数据有两种方法。两者都有不同的数据访问方式(Python中的示例): 备选案文1: obj1 = [ {"id": 1, "payload": "a"}, {"id": 2, "payload": "b"}, {"id": 3, "payload": "c"}, ] 在选项1中访问特定id的有效负载: for element in obj1: if element["id"] == 2:

如何在类似JSON的对象中正确存储数据?据我所见,在json对象中存储数据有两种方法。两者都有不同的数据访问方式(Python中的示例):

备选案文1:

obj1 = [
    {"id": 1, "payload": "a"},
    {"id": 2, "payload": "b"},
    {"id": 3, "payload": "c"},
]
在选项1中访问特定id的有效负载:

for element in obj1:
    if element["id"] == 2:
        print(element["payload"])
这意味着,必须扫描整个元素列表(可能),以找到正确的id并返回其值

另一方面,还有选项2:

obj2 = {
    1: "a",
    2: "b",
    3: "c",
}
要访问第二个“id”的有效负载,只需:


我现在的问题是,尽管选项1看起来更复杂,但为什么选项1更常见?我什么时候会使用选项1和选项2?

除了以某种方式演变的技术工件之外,如果元素的顺序很重要,那么选项1是有意义的。

我们应该澄清一些术语

当您在
[]
中放置一个值列表时,您正在创建一个数组;它由数组索引而不是数据的任何元素设置键

当您在
{}
中放置键和值列表时,您正在创建一个对象;正如您所注意到的,如果您知道相应的键,则可以定位一个值

这两种结构之间有许多不同之处。在特定的用例中,您的站点-希望根据其字段值之一查找数据实例-使用该字段作为键的对象是有意义的

但是对象键是无序的。数组更自然地让您遍历它们的所有元素


这取决于你将如何处理这些值;这就是为什么不只有一个数据结构。

取决于用例……好吧,你有一个对象数组,而不是一个对象-因此,由你决定哪一个是正确的任务。在扩展性和易读性方面,我认为第一种选择更好。要添加新属性吗?你不能用第二种选择。另外,您可以对选项2使用一个数组,它不一定是一个对象。还有一个选项3是objectsOkay的对象,那么让我们假设不是数组,而是对象
obj1={“data”:[]}
。现在我有两个对象。我经常将这种类型的对象视为来自Web服务的响应。我想我的问题主要是针对IDs的。为什么ID不总是存储为option2?我看不出它与任何事情有什么关系,不管你是否将数组包装在一个对象中。人们有时使用数组而不是对象的原因是,他们有时需要具有数组而不是对象特性的数据结构。
print(obj2[2])