鉴于一串象的数据,如何可以放心地把那串成一个JavaScript对象?

显然你可以做这种不安全的东西一样...

var obj = eval("(" + json + ')');

...但是这给我们留下容易受到id string含有其他代码,它似乎非常危险的简单eval。

有帮助吗?

解决方案

JSON.parse(jsonString) 是一个纯粹的JavaScript办法,所以,只要你能保证一个合理的现代化浏览器。

其他提示

延的方法现在已经过时了。使用这种方法来代替:

let jsonObject = JSON.parse(jsonString);

原来的答复使用弃jQuery的功能:

如果你使用jQuery只是使用:

jQuery.parseJSON( jsonString );

这正是你在找什么(见s 文档).

编辑:这一回答是对于即 < 7,对于现代浏览器检查乔纳森的答复所述。

编辑:这个答案是过时的, 乔纳森的回答上面 (JSON.parse(jsonString))是现在 最好的答案.

JSON.org 有JSON分析程序用于多种语言,包括4个不同的Javascript。我相信大多数人会认为 json2.js 他们转到执行。

使用简单的代码表示的下面 链接MSDN.

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

和反

var str = JSON.stringify(arr);

我不知道其他的方式来做到这一点,但这里就是你怎么做 原型(JSON教程).

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

evalJSON() 与真正的参数清理传入的串。

这似乎是问题:

输入接收、通过阿贾克斯websocket等,它总是会在String format-但你需要知道如果这是手机中。parsable.Touble是,如果你总是运行它通过手机中。分析,该程序可以继续'成功'但是你还是会看到一个错误扔在控制台有可怕的"错误:意想不到的令牌'x'".

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

如果你使用 jQuery, 你也可以做 $.getJSON(url, function(data) { });

然后你可以做的事情一样 data.key1.something, data.key1.something_else, 等等。

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

回调是通过返回的数据,这将是一个JavaScript对象或列为定义的id结构和分析使用 $.parseJSON() 法。

只是为了好玩,这里的方式使用功能:

 jsonObject = (new Function('return ' + jsonFormatData))()

尝试使用的方法与这些数据对象。例如:Data='{result:true,count:1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

这种方法确实有助于在node.js工作时与串口编程

使用手机中。分析可能是最好的方式。这里有一个例子 现场演示

var jsonRes = '{ "students" : [' +
          '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
          '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
          '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);

最简单的方式使用 parse() 方法:

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

然后你可以得到的价值 Json 元素,例如:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

使用 jQuery 作为描述 文档:

JSON.parse(jsonString);

我发现了一个"更好"的方式:

在抑:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

在Javascript:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
JSON.parse(jsonString);

手机中。分析将会改变为对象。

JSON分析总是痛苦的屁股。如果输入不是因为预计这将引发错误和崩溃你在做什么。你可以用下面的小小功能的安全分析你的输入。它总是变成一个对象即使输入不正确,或者已经是一个目的是更好地为大多数情况下。

JSON.safeParse = function (input, def) {
  // Convert null to empty object
  if (!input) {
    return def || {};
  } else if (Object.prototype.toString.call(input) === '[object Object]') {
    return input;
  }
  try {
    return JSON.parse(input);
  } catch (e) {
    return def || {};
  }
};

变换的目的,以式,然后分析了它,为我工作,如:

JSON.parse(JSON.stringify(object))

如果我们有一串这样的:"{\"状态\":1,\"令牌\":\"65b4352b2dfc4957a09add0ce5714059\"}" 然后我们可以简单地使用手机中。分析两次将这一串JSON对象:

var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)

简我们可以提取价值从JSON目的使用:

    // instead of last JSON.parse:
    var { status, token } = JSON.parse(jsonString);

结果将是:

status = 1 and token = 65b4352b2dfc4957a09add0ce5714059

手机中。分析()将任何JSON串通过进入功能,JSON对象。

为了更好地理解按F12开放检查件的浏览器和去控制台写的下列命令:-

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

现在运行的命令:-

console.log(JSON.parse(response));

你会得到输出作为目标{结果:真的,数:1}.

为了使用,目的,你可以把它分配给可变我们说obj:-

var obj = JSON.parse(response);

现在通过使用obj和点(.) 操作人员可以访问的性启的对象。

试运行命令

console.log(obj.result);

正式记录:

JSON.parse() 方法分析一个JSON串,构建JavaScript值或目标的描述通过。一个可选的 reviver 功能可以提供给执行一个转变将所得目前返回。

语法

JSON.parse(text[, reviver])

参数

文本

串分析允.见id对象说明,象的语法。

齐磊(可选)

如果一个函数,这种规定值如何最初产生的分析是改变之前,正在返回。

回值

对应该给予JSON文本。

例外情况

引发一语法错误的例外,如果串的分析不是有效的手机中。

你也可以使用 reviver 功能的过滤器。

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

更多信息,读 手机中。分析

老年问题,我知道,但是没有人注意到这一解决方案通过使用 new Function(), 匿名返回的数据。


只是一个例子:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

这是一个小小的更安全的,因为它执行内部的功能并不要编写在你的代码。因此,如果有一个功能宣言》内,它将不会受到默认窗口的对象。

我用这个为'汇编配置设置DOM元素(例如数据属性)的简单和快速。

分析id string结果的方式.分析(),并将数据变成一个JavaScript对象。

JSON.parse(jsonString)

在这里,JSON表示要处理json数据集。

例, 想象一下我们接到这个案文从一个网络服务器:

'{ "name":"John", "age":30, "city":"New York"}'

分析有关图书目的:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

这里obj各自的JSON对象,它看起来像下。

{ "name":"John", "age":30, "city":"New York"}

获取价值的使用。操作者的例子:

obj.name // John
obj.age //30

转移相反,转换JavaScript对象成一串结果的方式.转换成字符串().

摘要:

Javascript(浏览器和node.js)有一个建立在 JSON 对象。在这个对象是2方便的方法处理 JSON.它们是:

  1. JSON.parse() 需要 JSON 作为参数,返回JS对象
  2. JSON.stringify() 需要JS对象参数返回 JSON 对象

其他应用程序:

此外,为便利处理 JSON 他们可以被用于其他装置。这两者的结合 JSON 方法能使我们很容易深入的克隆的阵或对象。例如:

let arr1 = [1, 2, [3 ,4]];
let newArr = arr1.slice();

arr1[2][0] = 'changed'; 
console.log(newArr); // not a deep clone

let arr2 = [1, 2, [3 ,4]];
let newArrDeepclone = JSON.parse(JSON.stringify(arr2));

arr2[2][0] = 'changed'; 
console.log(newArrDeepclone); // A deep clone, values unchanged

如果你是在JavaScript JSON.parse 将是匿名的,通过该框架。
一个有效的 语法 安全地转JSON串成一个对象 应为:

var object = JSON.decode(string[, secure]);

另外一个 JSON Request 是可以提高的对象能够分析。
你可以cek它是如何把一个 json原始数据 在这里:

http://jsfiddle.net/chetabahana/qbx9b5pm/

试试这个。这一个是写稿.

         export function safeJsonParse(str: string) {
               try {
                 return JSON.parse(str);
                   } catch (e) {
                 return str;
                 }
           }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top