我想在JavaScript中将下面的字符串转换为数组。
{a:12, b:c, foo:bar}
我该如何将这个字符串转换为对象数组?有什么好的想法吗?
我想在JavaScript中将下面的字符串转换为数组。
{a:12, b:c, foo:bar}
我该如何将这个字符串转换为对象数组?有什么好的想法吗?
var myJSONString = '{ "a": 1, "b": 2 }',
myObject = JSON.parse(myJSONString);
一旦解析完成,你将得到一个带有属性a
和b
的对象。正如你所知,在JavaScript中,你可以将对象视为哈希表或关联数组,因此你可以像这样访问值:
myObject['a'];
如果你只需要一个简单的数组而不是关联数组,可以这样做:
var myArray = [];
for(var i in myObject) {
myArray.push(myObject[i]);
}
var myObject = eval("(" + myString + ")");
方法。由于您的字符串是格式不正确的JSON,因此JSON解析器无法正确解析它,即使使用eval()也会抛出错误。它也不是数组,而是哈希表或简单的对象文字(格式不正确)。如果对象字面量仅包含数字和字符串值(没有子对象/数组),则可以使用以下代码。
function malformedJSON2Array (tar) {
var arr = [];
tar = tar.replace(/^\{|\}$/g,'').split(',');
for(var i=0,cur,pair;cur=tar[i];i++){
arr[i] = {};
pair = cur.split(':');
arr[i][pair[0]] = /^\d*$/.test(pair[1]) ? +pair[1] : pair[1];
}
return arr;
}
malformedJSON2Array("{a:12, b:c, foo:bar}");
// result -> [{a:12},{b:'c'},{foo:'bar'}]
这段代码将把你的字符串转换成一个对象数组(复数)。
然而如果你真的想要一个HashMap(关联数组)而不是一个数组,请使用以下代码:
function malformedJSON2Object(tar) {
var obj = {};
tar = tar.replace(/^\{|\}$/g,'').split(',');
for(var i=0,cur,pair;cur=tar[i];i++){
pair = cur.split(':');
obj[pair[0]] = /^\d*$/.test(pair[1]) ? +pair[1] : pair[1];
}
return obj;
}
malformedJSON2Object("{a:12, b:c, foo:bar}");
// result -> {a:12,b:'c',foo:'bar'}
当您开始嵌套对象和数组时,上述代码将变得更加复杂。基本上,您必须重新编写JSON.js和JSON2.js以支持格式错误的JSON。
此外,请考虑以下选项,虽然仍然不太好,但比将JSON放在HTML标记属性中要好一些。
<div id="DATA001">bla</div>
<!-- namespacing your data is even better! -->
<script>var DATA001 = {a:12,b:"c",foo:"bar"};</script>
我假设您在字符串中省略引号,因为您将其放入HTML标记的属性中,并且不想转义引号。
eval('(' + myJSONtext + ')')
但是,由于这将解释任何 JavaScript 代码,因此存在安全漏洞。为了防止这种情况发生,请使用 JSON 解析器。如果您正在使用框架(jquery、mootools 等),则有一个特定于框架的调用。它们大多基于 Douglas Crawford 的解析器,可在 http://www.json.org/js.html 上获得。
使用JSON.parse即可达到效果,解析完成后可以将它们推入数组中。
var object = JSON.parse(param);
var array = [];
for(var i in object) {
array.push(object[i]);
}
var myObject = {a:'12', b:'c', foo:'bar'};
var myArray = [];
for(key in myObject) {
var value = myObject[key];
myArray[key] = value;
}
myArray['a']; // returns 12
如果您正在使用jQuery,那么有$.parseJSON()函数。它会在字符串格式不正确时抛出异常,"另外,如果您传入任何参数为空字符串、null或未定义的情况,parseJSON 将返回 'null'。当浏览器提供了本地的JSON.parse实现时,jQuery将使用它来解析字符串"
使用安全评估。与JSON.parse不同,这不需要键或值被引用。仅在值中包含嵌入逗号时才引用值。
const myStr = "{a:1, b:2, c:3}";
const myObj = string_exp(myStr);
console.log("dot: " + myObj.c);
function string_exp(sCmd) {
return Function(`'use strict'; return (${sCmd})`)();
}
toJSON
,则您提供的示例实际上将创建一个JavaScript对象。 - prodigitalson{a: 12, b: "c", foo: "bar"}
... 除非c
和bar
实际上是当前作用域中的变量,而不是字符串。 - Anthony Mills