如何在Javascript中将字符串更改为哈希对象?

时间:2018-02-25 08:14:52

标签: javascript

这是字符串。

{lat: -37.819616, lng: 144.968119},
{lat: -38.330766, lng: 144.695692},
{lat: -39.927193, lng: 175.053218},
{lat: -41.330162, lng: 174.865694},
{lat: -42.734358, lng: 147.439506},
{lat: -42.734358, lng: 147.501315},
{lat: -42.735258, lng: 147.438000},
{lat: -43.999792, lng: 170.463352}

我正在尝试像这样转换为哈希对象。

[    
{lat: -37.819616, lng: 144.968119},
{lat: -38.330766, lng: 144.695692}
]

我应该如何使用Javascript?

[已解决]我对如何在Javascript和JSON文件中表达哈希感到困惑。 在Javascript中

var locations = [ {lat: 35.123, lng: 127.111}, {lat: 35.222, lng: 111.222} ];

在JSON中

[
{ "lat": 35.123, "lng": 127.111 },
{ "lat": 35.222, "lng": 111.222}
]

我混淆了两种写作方式。不管怎样,谢谢。

3 个答案:

答案 0 :(得分:3)

您的字符串不正确,JSON解析器永远不会正确解析它。在这里你不能使用eval()函数方法。它不像数组,而是HashMap或简单的格式错误的Object。在你的情况下,你需要json与键值对组合。

{'lat': -37.819616, 'lng': 144.968119},
{'lat': -38.330766, 'lng': 144.695692}

如果您的对象不包含子对象/数组,您可以使用以下代码。

function formatJSON2Array (str) {
    var arr = [];
    str = str.replace(/^\{|\}$/g,'').split(',');
    for(var i=0,cur,pair;cur=str[i];i++){
        arr[i] = {};
        pair = cur.split(':');
        arr[i][pair[0]] = /^\d*$/.test(pair[1]) ? +pair[1] : pair[1];
    }
  console.log("JSON Array>>> " +JSON.stringify(arr)); // it will print [{"a":12},{"b":"c"},{"foo":"bar"}] in console
    return arr;
}

formatJSON2Array("{lat: -37.819616, lng: 144.968119},{lat: -38.330766, lng: 144.695692}");

上面的代码会将输入的字符串转换为对象数组。

但是,如果您确实需要HashMap(关联数组)而不是数组,请使用以下代码:

function FormatJSON2Object(str) {
    var obj = {};
    str = str.replace(/^\{|\}$/g,'').split(',');
    for(var i=0,cur,pair;cur=str[i];i++){
        pair = cur.split(':');
        obj[pair[0]] = /^\d*$/.test(pair[1]) ? +pair[1] : pair[1];
    }
  console.log("JSON Object >>> "+ JSON.stringify(obj)); // it will return {"lat":" -37.819616"," lng":" 144.695692","{lat":" -38.330766"}
    return obj;
}

FormatJSON2Object("{lat: -37.819616, lng: 144.968119},{lat: -38.330766, lng: 144.695692}");

请注意,当您开始使用它嵌套对象和数组时,上面的代码会变得复杂得多。对于使用数组对象和解析的JSON转换,这个th读取帮助了我很多。如果你有除lat lng之外的任何键值对,它将正常工作。

答案 1 :(得分:0)

这个简单的行应该这样做(如果需要,可以使用嵌套值):

carts = Cart.left_outer_joins(:product).select('carts.*, products.name as product_name')
cart = carts.first
cart.product_name

在此测试:

JSON.parse('[' + string.replace(/(\w+)\s*:/g, '"$1":') + ']')

答案 2 :(得分:-3)

UnknownError

{a:' b' }