代码之家  ›  专栏  ›  技术社区  ›  Mona Coder

如何将数组正确传递给JSON

  •  2
  • Mona Coder  · 技术社区  · 7 年前

    我正试图传递一组对象 "make":"Ford", "trim":"escape", "year":2014 到JSON对象中 car 以下示例

    var player = {
        "name":"John",
        "age":30,
        "car": [{"make":"Ford", "trim":"escape", "year":2014 }]
    }
    

    但我不明白为什么我要把这个元素包起来 { } . 我是说为什么

    "car": ["make":"Ford", "trim":"escape", "year":2014 ]
    

    数组没有 {} 不工作。我不愿意在这里创建数组,所以为什么我需要将它们包装起来 {}

    5 回复  |  直到 7 年前
        1
  •  2
  •   iPirat    7 年前

    支撑 {} 表示一个物体。基本上, {"make":"Ford", "trim":"escape", "year":2014 } 会描述一辆车。

    如果约翰只能有一辆车,你可以用这样的车:

    var player = {
        "name":"John",
        "age":30,
        "car": {"make":"Ford", "trim":"escape", "year":2014 }
    }
    

    如果约翰可以有多辆车,那么你应该使用 数组 这样地:

    var player = {
        "name":"John",
        "age":30,
        "cars": [{"make":"Ford", "trim":"escape", "year":2014 }, {"make":"Audi", "trim":"RS8", "year":2018 } /* more cars */ ]
    }
    
        2
  •  1
  •   Samuel Roberto    7 年前

    您的代码无法工作,因为您正试图创建一个对象类型数组,而在javascript中,对象被包装到 {} 标签

        3
  •  1
  •   Peteris    7 年前

    数组与对象

    在JSON中,数组由值组成。值可以是字符串( "year" )(数字) 2014 ,对象(中的某些内容) {} )或其他数组 [] ) "make":"Ford" 不是这些东西中的一个,它不是一个基本值,因此它不能是数组的一部分。

    JSON允许的另一件事是对象(比如 {"make":"Ford", "trim":"escape", "year":2014} - 那些 由字符串组成:值对类似 "make:"Ford" .

    对象不是数组;数组不是对象。JSON规范( https://www.json.org/ )可能会有所帮助。

    如果你真的想传递一个对象数组,就像你在第一句话中说的那样,那么你需要有多个独立的对象-不是 ["make":"Ford", "trim":"escape", "year":2014] 但是 [{"make":"Ford"}, {"trim":"escape"}, {"year":2014}] - 那个 将是由三个独立的、不相关的对象组成的数组。

        4
  •  1
  •   Hero Wanders    7 年前

    也许你是从PHP来的 associative arrays ? 如果您想在javascript中有类似的东西,只需使用对象! 如果 car 应该直接包含属性,您应该使用这个符号:

    "car": {"make":"Ford", "trim":"escape", "year":2014 }
    

    在javascript中,对象和数组是不同的种类:数组是按顺序排列的列表,仅按数字(其索引范围为 0 length - 1 )对象是无序结构,具有命名属性(如“make”、“trim”和“year”)。对象也支持属性列表/枚举,但这是另一回事。

    JSON中有一些基本类型,每个值都属于这些类型。 基本上有字符串、数字、布尔值、数组、对象或 null ,不是更多。(javascript添加了 undefined 或符号等)。

    每个数组条目和每个对象属性,如果像您试图做的那样用JavaScript对象表示法(JSON)写下来,则必须是这些类型之一。 特别是,数组被写为以逗号分隔的值列表。很明显你的例子 "make":"Ford" 不是单个值,而是对象中属性值分配的符号。

    我发现了一个关于JSON的小教程: https://www.digitalocean.com/community/tutorials/an-introduction-to-json

        5
  •  1
  •   Nick Taras    7 年前

    表示和对象,[]表示一个数组。

    如果一个玩家只能拥有一辆车,您可以将您的数据更改为下面的示例。

    player = {
        "name":"John",
        "age":30,
        "car": {"make":"Ford", "trim":"escape", "year":2014 }
    }
    

    但是,如果玩家可以有很多车,那么您应该根据您的代码示例,将对象放入一个数组中。

    [{"make":"Ford", "trim":"escape", "year":2014 }]
    

    数组只能为每个条目存储一种数据类型,例如array['string'、'number'、'object']。

    但是,您会发现数组通常由一种数据类型构成,例如array['string'、'string'、'string']。

    在这里,数组(用于存储项列表)和对象(用于封装列表项的数据)的组合非常有效。

    您可以使用所设计的播放器变量进行操作的示例:

    player = {
        "name":"John",
        "age":30,
        "cars": [
                {"make":"Ford", "trim":"escape", "year":2014 },
                {"make":"Audi", "trim":"escape", "year":2017 },
                {"make":"Seat", "trim":"escape", "year":2018 }
               ]
    }
    

    然后我们可以使用如下语法访问每个对象:

    const firstCar = player.cars[0];
    const audi = player.cars[1];
    const lastCar = player.cars[player.cars.length - 1];
    

    希望这能帮助您使用Web应用程序/网站:)