我有一个字符串如下:
"{'type': 'name', 'properties': {'name': 'urn:ogc:def:crs:EPSG::3857'}}"
我想将此字符串解析为JSON。
我该怎么做?
答案 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'}}"))();