【问题标题】:What is the type of the Value that can be inputed in a JSON Array / Object?可以在 JSON 数组/对象中输入的值的类型是什么?
【发布时间】:2015-01-19 23:48:00
【问题描述】:

知道,在 JSON 格式中,Object 和 Array 结构可以分别包含名称/值对和值的有序集合,并且值可以是 object/array/string/number/true/false/null ;说在数组(或对象)中值的类型可以变化是否正确?

意思是我可以拥有例如这个数组:

[String,Number,Array,Array,Object] 或者它必须是这种方式 [String,String,...] 或 [Array,Array,...] (整个数组的值类型相同)

对象结构的相同问题。 (关于键名/值对的值部分)

【问题讨论】:

    标签: javascript arrays json


    【解决方案1】:

    是的,您可以将任何类型的值与另一个对象的任何属性相关联,并且可以将任何类型的值添加到数组中。

    例如,这是完全有效的 JSON:

    {
     "key1": 1,
     "key2": "Two",
     "key3": ["Three", 4, {"five": "six"}, ["seven"]]
    }
    

    ... 可用于定义值,如您在此处看到的:

    【讨论】:

    • 我可以然后 var data = { "array" : "[ "1", { }, "abc"]" } 吗?
    • 你可以在 JSON 中堆叠任何东西,因为它是一个字符串,但祝你好运 ;)
    • @MaxZoom:是的,如果您打算从 JSON 字符串中反序列化某些内容,那么您肯定需要更静态的结构。但是 JavaScript 是一种脚本语言。你可以做任何你想做的事。
    • 我知道在 JavaScript 中,数组也是一个对象——这就是它起作用的原因。但是当您想对其应用任何算法(如排序、连接等)时,它会产生问题。这就是为什么它应该包含单一类型。
    【解决方案2】:

    在 Javascript 中,数组中元素的类型可以变化。例如

    var a = ["hello", 12345, {key : "value"}, true];
    

    这是有效的 javascript。但是,在数组中包含多个类型是不好的做法,因为您必须知道预期元素的顺序才能访问它们。例如你必须知道第一个元素是一个字符串。

    最好将上述数组表示为具有命名属性的对象:

       var o = {
          aString : "hello",
          aNumber : 12345, 
          aSubobject : {
             key : "value"
          },
          aBool : true
       }
    

    【讨论】:

      【解决方案3】:

      根据定义,数组应该只包含相同类型的元素。 然而,该对象可能包含不同的元素类型。这是 JSON 中的基本假设。

      【讨论】:

      • javascript 中的数组不必包含相同类型的对象,但最好确保它们包含。
      【解决方案4】:

      值可以是以下任何类型:Boolean、JSONArray、JSONObject、Number 和 String,或 JSONObject.NULL 对象。

      【讨论】:

        猜你喜欢
        • 2015-11-20
        • 2016-10-07
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        相关资源
        最近更新 更多