2012-06-20 5 views
2

개체 배열이 있는데, 각 배열에는 불확정 길이의 위치 및 링크 배열이 들어 있습니다. 루프를 사용하여 다중 레벨 JSON 객체를 만들려면 어떻게해야합니까?다단계 JSON 생성

최종 JSON 내가 데 문제가 제대로 개체를 형성하는 방법이다

item1: [ 
    { "location": [ 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value } 
    ], 
    "links": [ 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value }, 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value }, 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value } 
    ] 
    } 
], 
item2: [ //repeat of above ] 

처럼 보일 것입니다. 배열에 포함 된 개체를

로 정의
function Links(){ 
    this.location = null; 
    this.links= []; 

    function getLocation(){ 
    return location; 
    } 
    function setLocation(marker){ 
    this.location = marker; 
    } 

    function getLinks(){ 
    return links; 
    } 
} 

나의 현재 솔루션은

$post= json_decode($_POST['json']) 

PHP 문이 잘못된 배열을 반환이 꽤 작동하지 않습니다, 그러나

var json=[]; 
var linkData; 
for (var i=0; i < tourList.length; i++){ 
    var data = tourList[i]; 
    //create new child array for insertion 
    var child=[]; 

    //push location marker data 
    child.push({ 
    latitude: data.location.position.$a, 
    longitude: data.location.position.ab, 
    stopNum: i, 
    filename: data.location.title 
    }); 

    //add associated link data 
    for (var j=0; j<data.links.length; j++){ 
    linkData = data.links[i]; 
    child.push({ 
     latitude: linkData.position.$a, 
     longitude: linkData.position.ab, 
     stopNum: i+j, 
     fileName: linkData.title 
    }); 
    } 
    //push to json array 
    json.push(child); 
} 

//stringify the JSON and post results 
var results= JSON.stringify(json); 

입니다 여기서 $post.length은 정의되지 않은 상수로 간주됩니다. 이 잘못된 서식을 인해 가정합니다.

위의 객체를 정의하면 서버에 전송할 올바른 JSON을 어떻게 만들 수 있습니까?

stringify()의 현재 결과는 I가 처리 배열을 반복

$post = json_decode($POST['json']); 
for ($i=0; $i<$post.length; $i++) { } 

$post.length에 사용하고, 또한

[ 
    {"latitude":43.682211,"longitude":-70.45070499999997,"stopNum":0,"filename":"../panos/photos/1-prefix_blended_fused.jpg"}, 
    [ 
    {"latitude":43.6822,"longitude":-70.45076899999998,"stopNum":0,"fileName":"../panos/photos/2-prefix_blended_fused.jpg"} 
    ], 
    {"latitude":43.6822,"longitude":-70.45076899999998,"stopNum":1,"filename":"../panos/photos/2-prefix_blended_fused.jpg"}, 
    [ 
    {"latitude":43.68218,"longitude":-70.45088699999997,"stopNum":1,"fileName":"../panos/photos/4-prefix_blended_fused.jpg"}, 
    {"latitude":43.68218,"longitude":-70.45088699999997,"stopNum":2,"fileName":"../panos/photos/4-prefix_blended_fused.jpg"} 
    ] 
] 

이다.

POST 요청이

$.ajax({ 
    type: "POST", 
    url: "../includes/phpscripts.php?action=postTour", 
    data: {"json":results}, 
    beforeSend: function(x){ 
    if (x && x.overrideMimeType){ 
     x.overrideMimeType("application/json;charset=UTF-8"); 
    } 
    }, 
    success: function(data){ 
    if (data == "success") 
     console.log("Tour update successful"); 
    else 
     console.log("Tour update failed"); 

    } 
}); 
+1

'$ post.length' 대신'count ($ post) '를 사용 했습니까? –

+1

JSON 출력 샘플을 자바 스크립트에서 게시 할 수 있습니까? 또한, 이것을 PHP 스크립트에 어떻게 게시하고 있습니까? – Andre

+0

또한,'count(); 대신'strlen ($ post);를 확인하고 싶습니다. – Andre

답변

3

.

var json = []; 
var linkData; 
for (var i = 0; i < tourList.length; i++) { 
    var data = tourList[i]; 
    //create new child array for insertion 
    var child = [{ }]; 

    //push location marker data 
    child[0]['location'] = [{ 
     latitude: data.location.position.$a, 
     longitude: data.location.position.ab, 
     stopNum: i, 
     filename: data.location.title 
    }]; 

    child[0]['links'] = []; 

    //add associated link data 
    for (var j = 0; j < data.links.length; j++) { 
     linkData = data.links[i]; 
     child.links.push({ 
      latitude: linkData.position.$a, 
      longitude: linkData.position.ab, 
      stopNum: i + j, 
      fileName: linkData.title 
     }); 
    } 
    //push to json array 
    json.push(child); 
} 

//stringify the JSON and post results 
var results = JSON.stringify(json); 

하지만 출력 JSON이 너무 복잡한 이유는 무엇입니까? 더 간단한 방법은 다음과 같이 사용하는 것입니다.

item1: { 
    "location": { 
     "latitude": value, "longitude": value, "stopNum": value, "fileName": value 
    }, 
    "links": [ 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value }, 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value }, 
     {"latitude": value, "longitude": value, "stopNum": value, "fileName": value } 
    ] 
}, 
item2: [ //repeat of above ] 

단일 오브젝트 용으로 '배열'을 만드는 것입니다. 그 이유는 무엇입니까? 이 형식을 사용하면 코드가 (미묘하게) 단순화됩니다.

var json = []; 
var linkData; 
for (var i = 0; i < tourList.length; i++) { 
    var data = tourList[i]; 
    //create new child array for insertion 
    var child = { }; 

    //push location marker data 
    child.location = { 
     latitude: data.location.position.$a, 
     longitude: data.location.position.ab, 
     stopNum: i, 
     filename: data.location.title 
    }; 

    child.links = []; 

    //add associated link data 
    for (var j = 0; j < data.links.length; j++) { 
     linkData = data.links[i]; 
     child.links.push({ 
      latitude: linkData.position.$a, 
      longitude: linkData.position.ab, 
      stopNum: i + j, 
      fileName: linkData.title 
     }); 
    } 
    //push to json array 
    json.push(child); 
} 

//stringify the JSON and post results 
var results = JSON.stringify(json); 
+0

JSON 출력이 지나치게 복잡하고 올바르지 않다고 말하면서 내가 할 수 있기 전에 멋지게 요약했습니다. – Andre

+0

hehe! 나는 이겼다! :) –

+0

헤이 OP, 그 일을 했나요? (그리고 btw, 누군가 OP의 완전한 형태가 무엇인지 말해주십시오.) –

1

대답, 내 친구,로 정의 jQuery.ajax() 기능을 통해 것은 JSON.stringfy()입니다 :이 작업을해야

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify

+0

var 결과 = var results = JSON.stringify (json);'이미 수행 중 – Jason

+0

JSON.stringify가 잘못된 JSON을 생성하고 있습니까? – phenomnomnominal

+0

잘 모르겠습니다. 유효한 JSON에 대해 작동하는'json_decode' 연산의 결과 인 이상한 오류 서버 측이 나타납니다.따라서 서버에 보내기 전에 올바른 형식의 JSON을 생성하고 있는지 확인하기 만하면됩니다. – Jason