2016-01-30 4 views
0

У меня возникли проблемы с преобразованием строки в хэш (хэш с вложенными хэшами) в javascript.Javascript Convert String to Hash

Я хочу, чтобы преобразовать следующую строку:

«{ 'btc_usd': { 'цена': 376,2, 'объем': 42812,69, 'изменение': -0,5}, 'btc_cny': {'цена': 2519.39, 'volume': 67148.51, 'change': -85.13}, 'ltc_usd': {'price': 3.068, 'volume': 4735.55, 'change': -0.58}, 'btc_ltc': {'цена': 0,00805433, 'volume': 153.33, 'change': -0.76}, 'btc_eth': {'price': 0.00660196, 'volume': 6428.98, 'change': 5.87}} "

Я хочу сделать так, чтобы я мог сделать hash ['btc_usd'] ['price'] и получить 376.2.

Как я могу это сделать?

Это то, что я пытался, но это не похоже, работает:

var string="{'btc_usd': {'price': 376.2, 'volume': 42812.69, 'change': -0.5},'btc_cny': {'price': 2519.39, 'volume': 67148.51, 'change': -85.13},'ltc_usd': {'price': 3.068, 'volume': 4735.55, 'change': -0.58},'btc_ltc': {'price': 0.00805433, 'volume': 153.33, 'change': -0.76},'btc_eth': {'price': 0.00660196, 'volume': 6428.98, 'change': 5.87}}" 
var results=JSON.parse(string); 
+3

Это недействительный JSON, откуда вы его взяли? – zerkms

+2

Чтобы уточнить, одиночные кавычки '' 'должны быть двойными кавычками' '' для того, чтобы они были действительными. – Stijn

+1

Я уверен, что строки должны быть в двойных кавычках, а одинарные кавычки недействительны –

ответ

1

Почему вы не используете JSON напрямую?

var string = "{'btc_usd': {'price': 376.2, 'volume': 42812.69, 'change': -0.5},'btc_cny': {'price': 2519.39, 'volume': 67148.51, 'change': -85.13},'ltc_usd': {'price': 3.068, 'volume': 4735.55, 'change': -0.58},'btc_ltc': {'price': 0.00805433, 'volume': 153.33, 'change': -0.76},'btc_eth': {'price': 0.00660196, 'volume': 6428.98, 'change': 5.87}}"; 
string = "hash = " + string + ";"; 
eval(string); 

console.log(hash.btc_usd.price); 

Это очень просто, но это приходит с ценником: eval() опасно, если вы не знаете точно, где ваша строка приходит, например .: Вы не производили самим. Это также дорого: если вы хотите использовать его в цикле более тысячи или более записей, вы увидите некоторое время.

1

Единственное, что отличается от вашей строки и действительным JSON является использование одинарных кавычек вместо двойных кавычек. Поэтому вы можете просто изменить это, а затем проанализировать полученный JSON.

str = str.replace(/'/g, "\""); 
var result = JSON.parse(str); 

Конечно, это справедливо только до тех пор, пока не строковые литералы с одинарными кавычками (например {'name': 'John O\'hara'}).