将字符串转换为JSON对象


148

您如何使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..


2
您的标题具有误导性。根据问题的内容,我想说您想将包含JSON的字符串转换为JavaScript对象/数组。
Felix Kling 2012年

好,我解决了。字符串中有一个\ n。现在只需要弄清楚如何与此一起使用JSON.parse。
Zer0 2012年

好吧,我修好了。转到jsonlint.com并将您的字符串放在此处。如果它说对了,那么您可以使用JSONParse来实现相同的目的。
Zer0 2012年

万一有人读到这个,标题应该是“将JSON字符串转换为对象”
Chris G

Answers:


352
var obj = JSON.parse(string);

string您的json字符串在哪里。


这是行不通的。它抛出错误“ SyntaxError:JSON.parse:意外字符”。字符串没有问题,因为当我通过ajax请求获得相同的字符串并将其作为“ JSON”处理时,就不会出现问题。
Zer0 2012年

请发布您的主要JSON字符串
Kshitij 2012年

{“ data”:[{id“:-您在此处缺少双引号,即以id开头的双引号
Kshitij 2012年

2
当我通过Ajax获得它时,它将按JSON处理响应。所以我觉得我必须将其转换为一个JSON对象..
ZER0

2
我最终去了jsonlint.com,并确保我的Json是正确的
Zer0 2014年

26

您可以使用JSON.parse()

参阅MDN上的文档

例:

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

1
这是行不通的。它抛出错误“ SyntaxError:JSON.parse:意外字符”。字符串没有问题,因为当我通过ajax请求获得相同的字符串并将其作为“ JSON”处理时,就不会出现问题。
Zer0 2012年

2
@ Zer0:您应该使用json字符串来更新您的问题。
Sarfraz

4
@ Zer0:我们只能尽我们所能回答。您说您有JSON字符串,我们会相应回答。看来您的字符串有所不同,如果您将其发布,我们可以考虑到这一点来回答。如果您提出有关编码的问题,那么代码/数据是必不可少的。
Felix Kling 2012年

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不正确。它不是字符串,而且格式不正确。您的第二行将变得多余。这应该是这样: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' 我知道这是一篇很老的文章,但是我想我会增加一些清晰度,以防有人发现。
James Eberhardt

我使用$.parseJSON哪里JSON.parse无法正常工作并引发错误来解决我的问题JSON.parse is not a function
brasofilo


3

使用对象映射器将字符串转换为HashMap ...

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

在内部Map将表现为JSON对象


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

将字符串变量传递给Json parse:

Objdata= Json.parse(Data);

在您的示例中,Data已经是一个对象,因此无需解析它。您需要在所有数据周围加上一些引号,以使其成为字符串。
詹姆斯·埃伯哈特



0

让我们考虑一下你有像这样的字符串

示例:“名称:露西,年龄:21,性别:女”

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);

`

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.