将字符串转换为JSON对象

187
如何让JS认为一个字符串是JSON?
我有一个只接受JSON对象参数的函数。如果我传递一个与JSON格式相同的字符串,则该函数不起作用。因此,我想让这个函数认为传递给它的字符串是JSON。这个字符串确实是按照JSON格式的。
我还尝试过以下方法。我通过Ajax将字符串输入,并将“handle as”参数设置为“JSON”,然后将结果传递给函数,它就可以正常工作了。
因此,我得出结论问题不在于字符串本身。如何将这个字符串转换为JSON呢?如果我通过Ajax请求得到同样的字符串并将其传递给函数,那么它就可以正常工作,而直接传递则无法工作。
该字符串如下:
  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..

1
可能是重复的问题:如何安全地将 JSON 字符串转换为对象? - Manse
4
您的标题有误导性。根据您问题的内容,我更倾向于说您想将一个包含 JSON 的字符串转换为 JavaScript 对象/数组。 - Felix Kling
好的,我解决了。字符串中有一个\n。现在只需要弄清如何使用JSON.parse处理它。 - Zer0
好的,我已经修复了。前往http://jsonlint.com/并将您的字符串放在那里。如果它说是正确的,那么您可以使用JSONParse来实现相同的效果。 - Zer0
如果有人看到这篇文章,标题应该是“将JSON字符串转换为对象”。 - user5734311
10个回答

414
var obj = JSON.parse(string);

其中string是您的JSON字符串。


1
这个不起作用。它抛出一个错误:“SyntaxError: JSON.parse: unexpected character”。字符串没有问题,因为当我通过ajax请求获取相同的字符串并将其处理为“JSON”时,没有任何问题发生。 - Zer0
{"data": [{"id": - 您缺少了一个双引号,即id的起始双引号 - Kshitij
我不知道为什么SO把它删除了。它在字符串中存在。它是 { "data": [ { "id" - Zer0
2
当我通过Ajax获取它时,它可以处理JSON响应,因此我认为我必须将其转换为JSON对象。 - Zer0
2
我最终去了jsonlint.com,并确保我的Json正确无误。 - Zer0
显示剩余2条评论

27

您可以使用JSON.parse()来实现。

请参阅MDN文档

示例:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);

1
这个好像不行。它会抛出一个错误:“SyntaxError: JSON.parse:unexpected character”。字符串本身没有问题,因为当我通过 ajax 请求获取相同的字符串并将其处理为“JSON”时,就不会出现问题。 - Zer0
2
@Zer0:您应该更新您的问题,附上您尝试的方法以及您的JSON字符串。 - Sarfraz
5
@Zer0: 我们只能根据我们所知道的最好地回答问题。你说你有一个JSON字符串,我们会相应地回答。如果你发布它,我们可以考虑这一点来回答你的问题。如果你问一个关于编码的问题,那么代码/数据是必不可少的。 - Felix Kling

7

我遇到了和你类似的字符串问题。

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

这里的问题在于字符串的结构。JSON解析器没有识别出需要创建2个对象的情况。所以我做了一件有点儿傻的事情,重新构造了我的字符串并加上了[],这样解析器就能识别了。
var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

希望能对您有所帮助, 如果有更优雅的方法,请分享。

在您上面的代码中,您构造了myString不正确。它不是一个字符串,也格式化不正确的JSON。因此,您的第二行将变得多余。这是应该的:`var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]'`我知道这是一个相当旧的帖子,但我想添加一些清晰度以防有人发现它。 - James Eberhardt
我使用$.parseJSON解决了我的问题,因为JSON.parse无法工作并抛出错误“JSON.parse不是一个函数” - brasofilo

5

4
将字符串转换为HashMap,使用Object Mapper...

new ObjectMapper().readValue(string, Map.class);

内部的Map将作为JSON对象进行操作。

4

只需使用 eval 函数即可。

var myJson = eval(theJsibStr);

3
eval是有害的,请非常小心使用这种方法确保安全。 - dparker

2

假设您有以下字符串:

示例:"name:lucy,age:21,gender:female"

这是一个包含名称、年龄和性别的字符串。

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

`


2
var Data=[{"id": "name2", "label": "Quantity"}]

将字符串变量传入Json解析器中:
Objdata= Json.parse(Data);

在你的例子中,Data已经是一个对象,所以不需要解析它。你需要在所有的Data周围加上引号,以使其成为一个字符串。 - James Eberhardt

1
"

JSON.parse()函数就可以了。

或者

使用Jquery,

"
var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );

1

JSON.parse() 是你的好朋友。以下是一个例子:

let obj = JSON.parse(yourString)
console.log(typeof obj); // prints 'object' assuming your string is correctly formatted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接