如何将特殊字符串解析为JSON?

时间:2016-08-15 06:23:41

标签: javascript json

我有一个字符串如下:

"{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}"

我想将此字符串解析为JSON。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

您提供的字符串不是有效的JSON。有两个选项可以使用 eval() 方法,也可以将其设置为有效的JSON和解析。

使用 eval() 方法:

var obj = eval('(' + "{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}" + ')');

var obj = eval('(' + "{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}" + ')');

console.log(obj);

但我不喜欢 eval() 方法,请参阅:Don't use eval needlessly!

或者通过用双引号替换单引号将其转换为有效的JSON:

var obj = JSON.parse("{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}".replace(/'/g,'"'));

var obj = JSON.parse("{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}".replace(/'/g, '"'));

console.log(obj);

仅供参考:以上代码仅在属性名称或值内没有'(单引号)时才有效,否则由"替换。在这种情况下,为了生成JSON,您需要使用更复杂的正则表达式。

但最好将字符串本身初始化为有效的JSON,并使用 JSON.parse() 方法对其进行解析。

{"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG::3857"}}

var obj = JSON.parse('{"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG::3857"}}');

console.log(obj);

答案 1 :(得分:1)

试试这个:

用双引号(')替换所有单引号(")。

 var s={
        "type": "name",
        "properties": {
            "name": "urn:ogc:def:crs:EPSG::3857"
        }
    }

JavaScript函数JSON.parse(text)可用于将JSON文本转换为JavaScript对象:

 var j=JSON.parse(x);

现在变量j具有JavaScript对象。

答案 2 :(得分:1)

有效的JSON将是:

var text = '{"type": "name", "properties": {"name":"urn:ogc:def:crs:EPSG::3857"}}';

var obj = JSON.parse(text);

答案 3 :(得分:0)

如果您想避免eval并希望避免格式化JSON.parse的字符串,可以尝试:

var jsonStr = "{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}";
var jsonFn = new Function("return "+jsonStr);
var json = jsonFn();

或直接:

var json = (new Function("return {'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}"))();