将字符串转换为 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 对象的主要内容,如果未能解决你的问题,请参考以下文章