2013-05-15 37 views
3

我有JSON字符串:如何獲得JSON對象的指數

var Str="[{ 'label': 'Month'},{ label: 'within'},{ label: 'From'}, 
     { label: 'Where'},]"; 

我把它轉換成JSON對象爲:

 var tagString = eval(Str); 

我想獲得一個月的指標,而不循環

有沒有更好的方式來獲取對象的索引而不使用循環?

在此先感謝!

+4

的代碼段這不是JSON。但是你應該使用'JSON.parse'而不是'eval' ... – elclanrs

+0

我不這麼認爲,用給定的數據結構你需要循環 –

+0

如果我使用JSON.parse它會給出這樣的JSON錯誤。解析:期望的屬性名稱或'}' –

回答

10

如果這些都是標籤,你可以像這樣改變結構,所以它是「一系列標籤」,在我看來,它會更合適。

var Str = '["Month","within","From","Where"]'; 

然後用JSON.parse解析它他們,或者因爲你使用jQuery,$.parseJSON讓它在更多的瀏覽器工作:

var labels = JSON.parse(Str); 

labels現在應該是一個數組,您可以使用Array.indexOf

var index = labels.indexOf('Month'); 

It's ES5和大多數現代瀏覽器都支持它。對於舊版瀏覽器,you need a polyfill不幸的是...也使用循環。

+0

如果我使用var index = labels.indexOf('Month');它返回-1 –

+0

@amol [Works here](http://jsfiddle.net/XCEtn/)。你一定錯過了一些東西。 – Joseph

+0

看到這個小提琴,爲什麼這給了-1 http://jsfiddle.net/amol_0504/G2JW7/ –

22

不要使用eval解析json!使用JSON.parseArray.map是一個很好的替代循環在這裏:

var str = '[{ "label": "Month"}, { "label": "within"}, { "label": "From"}, { "label": "Where"}]'; 
var data = JSON.parse(str); 
var index = data.map(function(d) { return d['label']; }).indexOf('Month') 

jsFiddle

+0

但是你的解決方案是迭代數組。 – vdua

+0

@vdua:是的,這是搜索列表的唯一方法。 – Eric

+0

這是正確的,我誤解了這個問題,並假定他不想迭代數組。我的錯。不管怎麼說,多謝拉 – vdua

1

注意:如果你想通過它的價值得到JSON中的特定項目,我遇到了這個答案,想着分享。

您可以使用Array.splice()

首先爲@elclanrs和@Eric提到,在使用JSON.parse()來;

var Str = '[{ "label": "Month"}, { "label": "within"}, { "label": "From"}, { "label": "Where"}]'; 

var item = JSON.parse(Str); 

item = item.splice({label:"Month"},1); 

及其ES5。

看到這裏

var Str = '[{ "label": "Month"}, { "label": "within"}, { "label": "From"}, { "label": "Where"}]'; 
 
var item = JSON.parse(Str); 
 

 
item = item.splice({label:"Month"},1); 
 

 
console.log(item);