将 JSON 反序列化为 JavaScript 对象

2022-08-30 00:07:29

我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像下面这样:

var json = [{
    "adjacencies": [
        {
          "nodeTo": "graphnode2",
          "nodeFrom": "graphnode1",
          "data": {
            "$color": "#557EAA"
          }
        }
    ],
    "data": {
      "$color": "#EBB056",
      "$type": "triangle",
      "$dim": 9
    },
    "id": "graphnode1",
    "name": "graphnode1"
},{
    "adjacencies": [],
    "data": {
      "$color": "#EBB056",
      "$type": "triangle",
      "$dim": 9
    },
    "id": "graphnode2",
    "name": "graphnode2"
}];

当字符串从服务器中提取时,有没有一种简单的方法可以将其转换为活的JavaScript对象(或数组)?还是我必须手动拆分字符串并手动构建对象?


答案 1

现代浏览器支持.JSON.parse()

var arr_from_json = JSON.parse( json_string );

在不包含 json2 库的浏览器中,可以包含 json2


答案 2

JSON的全部意义在于,JSON字符串可以转换为本机对象,而无需执行任何操作。检查此链接

可以使用 或 。eval(string)JSON.parse(string)

但是,这是有风险的。从 json.org:eval

评估函数非常快。但是,它可以编译和执行任何JavaScript程序,因此可能存在安全问题。当来源是可信和有能力的时,就表明了评估的使用。使用 JSON 解析器要安全得多。在通过 XMLHttpRequest 的 Web 应用程序中,只允许与提供该页面的同一源进行通信,因此它是受信任的。但它可能不称职。如果服务器的JSON编码不严格,或者它没有严格验证其所有输入,那么它可能会提供可能携带危险脚本的无效JSON文本。eval函数将执行脚本,释放其恶意。