2009-12-17 61 views
2

我得到看起來像這樣的JSON名稱/值對:的JavaScript訪問名稱/值對

{ 
    "Name":"parentid", 
    "Value":"blah" 
}, 
{ 
    "Name":"siteid", 
    "Value":"blah" 
}, 
{ 
    "Name":"sitename", 
    "Value":"blah" 
} 

但我想訪問「名稱」值作爲重點,而「價值」值作爲VALUE。有沒有一種優雅的方法可以將這件JSON變成這樣的東西?

{'parentid', 'blah'}, 
{'sitename', 'blah'} 

回答

5

試試這個:

var items = [ 
    { 
     "Name":"parentid", 
     "Value":"blah" 
    }, 
    { 
     "Name":"siteid", 
     "Value":"blah" 
    }, 
    { 
     "Name":"sitename", 
     "Value":"blah" 
    } 
]; 

var results = new Object(); 

for (var i = 0; i < items.length; i++) 
{ 
    results[items[i].Name] = items[i].Value; 
} 

這將導致類似:

var results = { parentid: "Blah", siteid: "Blah", sitename: "Blah" }; 
-1

我假設你正在使用PHP和PHP相呼應,你assosiatice這樣阿雷:

echo json_encode($result); 

在你的JavaScript中,你可以這樣做:

// Soemthing retrieves php result and puts it in `var result`. 
data = eval("(" + result+ ")"); 
alert(data.parentid); 

我不確定這是你想要的,但它是一個解決方案。

1
function objectflatten (array) { 
    var out = {}, i; 
    for(i = 0; i < array.length; i++) { 
    out[array[i].name] = array[i].value; 
    } 
    return out; 
} 

這是將在你所呈現的形式的對象,並將其輸出作爲具有名稱值作爲密鑰,並且該值的值作爲值的「正常」的對象的函數。

2

一種方法。

var json = [ 
    { 
    "Name":"parentid", 
    "Value":"blah" 
    }, 
    { 
    "Name":"siteid", 
    "Value":"blah" 
    }, 
    { 
    "Name":"sitename", 
    "Value":"blah" 
    } 
]; 

for (var i = 0, l = json.length, obj; i < l; i++) 
{ 
    obj = json[i]; 
    json[i] = new Object(); 
    json[i][obj.Name] = obj.Value; 
} 

// console.log() requires Firebug 
console.log(json); 
+0

而不是對象()調用,爲什麼不只是:'json [i] = {obj.Name:obj.Value}' – jpsimons 2009-12-17 23:18:59

1

我建議使用for(... in ...)方法完成此任務。它會抓住你需要的關鍵名稱。

var jsonObj = eval('([{ "Name":"parentid", "Value":"blah" }])'); 

for(var i = 0, assoc = {}, key; i < jsonObj.length; ++i) 
{ 
    for(key in jsonObj[ i ]) // <-- this right here 
    { 
     assoc[ key ] = jsonObj[ i ][ key ]; 
    } 
} 

和你結束了(來自螢火蟲)

Object Name=parentid Value=blah

可由object.key或訪問的對象[ '鍵'](在我們的情況下assoc.Name或ASSOC [ 'Value'])

這是來自Yahoo!的Douglas Crockford的鏈接。關於使用它 - http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

+0

請小心這樣做,因爲您可能會循環你不知道的東西在那裏,因爲它們是遺傳的。請參閱此處的「for in」部分:http://www.jslint.com/lint.html – 2009-12-17 23:12:23

+0

您是對的,爲了「更安全」,您可以使用Crock的方法 (對象名稱) { if(object.hasOwnProperty(name)){...} } 但是在JSON中,您正在解析或評估對象,所以不應該有任何垃圾,如果您要這樣做一個DOM節點(嘗試我的代碼,通過單擊返回值檢查Firebug的DOM選項卡中的「assoc」結果)。 – 2009-12-18 00:46:33