2012-06-05 3 views
4

이름/값 객체 배열이 있습니다 (아래). 이름은 다차원 배열을 나타 내기 위해 형식이 지정됩니다.다차원을 포함하는 문자열에서 JSON 객체를 빌드하십시오.

전체 JavaScript 개체를 빌드해야합니다 (아래쪽). 이 같은 속으로

[{ 
name: "getQuote[origin]", 
value: "Omaha,NE" 
}, 
{ 
name: "getQuote[destination]", 
value: "10005" 
}, 
{ 
name: "getQuote[country]", 
value: "us" 
}, 
{ 
name: "getQuote[vehicles][0][year]", 
value: "1989" 
}, 
{ 
name: "getQuote[vehicles][0][make]", 
value: "Daihatsu" 
}, 
{ 
name: "getQuote[vehicles][0][model]", 
value: "Charade" 
}, 
{ 
name: "getQuote[vehicles][0][count]", 
value: "1" 
}] 

는 :

{getQuote : 
    { origin : Omaha}, 
    { destination : 10005}, 
    {vehicles : [ 
    { 
    year : 1989, 
    make: Honda, 
    model : accord 
    }, 
    { 
    //etc 
}] 

N

+2

[ "JSON 개체"같은 건 없습니다.] (http://benalman.com/news/2010/03/theres-no-such-thing-as- a-json /) 당신은 대부분 "객체"만을 원할 것입니다. –

+1

설명이 추가되었습니다. Oleg. –

+0

오마하, 네브라스카 – jbranchaud

답변

2

당신은 다음과 같이 수동으로 수행 할 수 있습니다

var source = [ /* Your source array here */ ]; 
var dest = {}; 

for(var i = 0; i < source.length; i++) 
{ 
    var value = source[i].value; 

    var path = source[i].name.split(/[\[\]]+/); 

    var curItem = dest; 

    for(var j = 0; j < path.length - 2; j++) 
    { 
     if(!(path[j] in curItem)) 
     { 
      curItem[path[j]] = {}; 
     } 

     curItem = curItem[path[j]]; 
    } 

    curItem[path[j]] = value; 
} 

dest은 결과 개체입니다.

여기서 일을 확인 : http://jsfiddle.net/pnkDk/7/

+0

달콤한! 짧고 정말 좋은! –

+0

MMmm, 내가 전에 보지 못했던 몇 가지 새로운 것들. 내가 가진 해결책은 이것만큼 우아하지 않았습니다. 금은 당신을 위해 별, Shedal. –

+0

숫자 indizes에 대한 배열을 생성하지 않습니다. 나는 당신이 그것을 쉽게 고칠 수 있다고 생각합니다. – Bergi

관련 문제