从JSON动态创建对象

时间:2013-05-05 07:55:08

标签: javascript json object

我可以从JSON动态创建对象吗?

这是阵列中的一部分:

values: [{
        "$type": "Entrance, DataModel",
        "EntranceDeviceData": {
            "$type": "DeviceData, DataModel",
            "Watchdog": 0,
            "Inputs": {
                "$type": "Int16[], mscorlib",
                "$values": [0, 0]
            },
            "Outputs": {
                "$type": "Int16[], mscorlib",
                "$values": [0, 0]
            },
            "Faults": {
                "$type": "Int16[], mscorlib",
                "$values": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
            },
            "StandingCommand": 0
        },
        "Vehicle": null,
        "NextStates": {
            "$type": "System.Collections.Generic.List`1[[System.String, mscorlib]], mscorlib",
            "$values": ["CarApproachingBarrier"]
        },
        "Repository": {
            "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib"
        },
        "Direction": 0,
        "Name": "Entrance",
        "Position": "0,0,0,0",
    }, {...another object...
    }, {...another one...
    }
]

这两个JSON对象都不同。我可以在不事先知道它的属性的情况下创建一个对象(对于每个其他JSON对象)吗?我该怎么办?

(我听到了一些可能的事情,但也许我不太了解那个说过的人。)

2 个答案:

答案 0 :(得分:0)

您在上面原始代码中提供的JSON示例是Javascript定义文字对象的方式。 json1和json2已经是javascript对象,不需要创建它们。

// original code from question
var json1 = {
   "mysex": "female",
   "yoursex": "male",
   "location": {
       "lat": "48",
       "lng": "1"
   },
   "description": "descr2",
   "owner": "zBYnfuu8DXEwMttwZ",
   "nickname": "user",
   "_id": "1"
};

正如nnnnnn在下面指出的那样,JSON最常用于引用包含如上格式化的代码的STRING,它将是:

var json1_as_string = '{
   "mysex": "female",
   "yoursex": "male",
   "location": {
       "lat": "48",
       "lng": "1"
   },
   "description": "descr2",
   "owner": "zBYnfuu8DXEwMttwZ",
   "nickname": "user",
   "_id": "1"
}';

要从这样的String获取到实际的Javascript对象,您需要解析它:

var json1 = JSON.parse(json1_as_string);

相反的方向(Javascript Object to String)由stringify实现:

var json1_as_string = JSON.stringify(json1);

请参阅https://developer.mozilla.org/en-US/docs/Using_native_JSON

P.S。

这两个非常不同的对象具有相同的“_id”似乎很奇怪。

答案 1 :(得分:0)

你完全改变了这个问题,我正在努力理解你在问什么。

  

这两个JSON对象都不同。我可以创建一个对象(for   每个其他JSON对象)事先不知道它的属性?   我该怎么办?

是的,在Javascript中,您可以在不事先了解其属性的情况下创建对象。 Javascript没有强类型,也没有类。所以绝对没有问题 拥有不同属性的对象。