将字符串转换为 JSON 对象

Posted

技术标签:

【中文标题】将字符串转换为 JSON 对象【英文标题】:Converting a string to JSON object 【发布时间】:2012-06-14 04:03:03 【问题描述】:

如何让 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..

【问题讨论】:

Safely turning a JSON string into an object 的可能重复项 您的标题具有误导性。根据您问题的内容,我宁愿说您想将包含 JSON 的字符串转换为 javascript 对象/数组。 好的,我解决了。字符串中有一个 \n。现在只需要弄清楚如何使用 JSON.parse。 好的,我修好了。转到jsonlint.com 并将您的字符串放在那里。如果它说它是正确的,那么你可以使用 JSONParse 来实现同样的效果。 如果有人读到这个,标题应该是“将 JSON 字符串转换为对象” 【参考方案1】:
var obj = JSON.parse(string);

string 是您的 json 字符串。

【讨论】:

这不起作用。它抛出错误 "SyntaxError: JSON.parse: unexpected character" 。字符串没有问题,因为当我通过 ajax 请求获得相同的字符串并将其作为“JSON”处理时,不会出现问题。 请发布您的实际 JSON 字符串 "data": [ id": - 你在这里缺少双引号,即开始 id 的双引号 当我通过 Ajax 获取它时,它会像处理 JSON 一样处理响应。所以我想我必须将它转换为 JSON 对象.. 我最终去了 jsonlint.com,并确保我的 Json 是正确的【参考方案2】:

您可以为此使用JSON.parse()

See docs at MDN

示例:

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

【讨论】:

这不起作用。它抛出错误 "SyntaxError: JSON.parse: unexpected character" 。字符串没有问题,因为当我通过 ajax 请求获得相同的字符串并将其作为“JSON”处理时,不会出现问题。 @Zer0:你应该用你的json字符串来更新你的问题。 @Zer0:我们只能尽我们所能回答。你说你有一个 JSON 字符串,我们相应地回答。您的字符串似乎不同,如果您发布它,我们可以考虑到这一点来回答。如果你问一个关于编码的问题,那么代码/数据是必不可少的。【参考方案3】:
var obj = jQuery.parseJSON('"name":"John"');
alert( obj.name === "John" );

链接:-

http://api.jquery.com/jQuery.parseJSON/

【讨论】:

【参考方案4】:

我遇到了与你类似的字符串同样的问题

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"]' 我知道这是一篇很老的帖子,但我想我会添加一些说明以防万一有人发现它。 我使用$.parseJSON 解决了我的问题,其中JSON.parse 不起作用并引发错误JSON.parse is not a function【参考方案5】:

只需使用eval 函数。

var myJson = eval(theJsibStr);

【讨论】:

eval 是邪恶的,使用这种方法要非常小心安全【参考方案6】:

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

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

内部 Map 将表现为 JSON 对象

【讨论】:

【参考方案7】:
var Data=["id": "name2", "label": "Quantity"]

将字符串变量传递到 Json 解析中:

Objdata= Json.parse(Data);

【讨论】:

在您的示例中,Data 已经是一个对象,因此无需解析它。您需要在所有数据周围加上引号才能使其成为字符串。【参考方案8】:

让我们假设你有像

这样的字符串

示例:"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);

`

【讨论】:

【参考方案9】:

JSON.parse() 函数可以。

使用 Jquery,

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

【讨论】:

以上是关于将字符串转换为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

java将json字符串转换成对象批量存储数据

js 将json字符串转换为json对象或json对象转换成json字符串

Jackson 对象和JSON的相互转换

json字符串转换成对象,对象为空,如何解决

jQuery怎么把JSON格式的字符串转换为JSON对象

JavaScript:如何将JSON对象转换成JSON字符串呢