2016-06-24 3 views
0

JSON 객체의 이름에서 String 이름을 가져 오는 데 문제가 있음을 확인했습니다. 서버의 JSON 응답에서이 종류의 구문을 분석해야합니다.javascript 객체의 값을 구문 분석합니다.

var response = { 
    hopaopGmailsjIpW: { 
    GmailsjIpW_totalEmails_count: 133, 
    GmailsjIpW_state: 1 
    }, 
    hopaopGmail4y4yu: { 
    Gmail4y4yu_totalEmails_count: 156, 
    Gmail4y4yu_state: 1 
    } 
} 

내부 개체가있는 개체는 아니지만 Array입니다. inner ojects 이름을 파싱하고 각 객체에 값을 추가해야합니다.

나는 같은 것을 할 수 수 원하는 :

for(var i =0; i < response.length; i++){ 
    response[i].username = parseUsernameFromString(response[i]); 
    response[i].service = parseServiceFromString(response[i]); 
    response[i].id = parseIdString(response[i]); 
} 

그래서 질문은 (그리고 각 작업에 대한 상태) : 그것을 만들 수있는 가장 좋은 방법은 무엇입니까 ?

UPDATE 이 지금은 정확히 내가 무엇을 가지고 :

for(var key in response){ 
    if(stringContains(response[key], "Gmail")) { response[key].service = "Gmail";} 
     console.log("task name: "+ response[key].service); 
} 
function stringContains(originalString, searchString){ 
     if(originalString.indexOf(searchString) > -1){ 
      return true 
     } 
      else return false; 
} 
+1

첫 번째 블록이 JSON도 아니고 자바 스크립트입니다 : 위의 게시와 같은

var obj = JSON.parse(responseString); 

나중에 당신이 그것을 반복 할 수있다. 그것을위한 사용자 정의 파서를 작성해야합니다 ([here] (https://en.wikipedia.org/wiki/Lexical_analysis) 읽기 시작). 응답이 실제로 JSON이되도록 서버를 수정하는 것이 좋습니다. – Quentin

+0

문제는 서버 측에서 데이터 캐시의 일부 구현에서 요청한 것이므로 서버 부분을 변경하는 것은 너무 많은 작업이며 가치가 없습니다. 또한 내 애플 리케이션에서 한 곳에서만이 상황이 있습니다. – user1935987

+0

오른쪽, 쉼표가 누락되었습니다. 죄송합니다, – user1935987

답변

2

객체를 걷는를 들어, for ... in 루프를 사용해야합니다.

실제 문제은 : 코드에 ,이 누락되었습니다. 고정 작업 조각 참조 :

발췌문

var response_Parsed = { 
 
    hopaopGmailsjIpW: { 
 
    GmailsjIpW_totalEmails_count: 133, 
 
    GmailsjIpW_state: 1, 
 
    service: 'Gmail', 
 
    username: 'hopaop', 
 
    id: 'sjIpW' 
 
    }, 
 
    hopaopGmail4y4yu: { 
 
    Gmail4y4yu_totalEmails_count: 156, 
 
    Gmail4y4yu_state: 1, 
 
    service: 'Gmail', 
 
    username: 'hopaop', 
 
    id: '4y4yu' 
 
    } 
 
}; 
 
for (id in response_Parsed) { 
 
    console.log("----"); 
 
    if (id.indexOf("Gmail") > -1) { 
 
    console.log("We have Gmail: " + id); 
 
    console.log("UniqueName: " + id.replace("hopaopGmail", "")); 
 
    console.log("Username:  " + response_Parsed[id].username); 
 
    console.log("Email Count: " + response_Parsed[id][id.replace("hopaop", "") + "_totalEmails_count"]); 
 
    } 
 
    else 
 
    console.log("We don't have Gmail: " + id); 
 
}

또한 객체의 키를 통해 열거 할 수있는 올바른 방법을 Object.keys을 사용하는 것입니다.

+0

이 답변을 더 잘 만들려면 추가하거나 수정해야 할 것이 있습니까? –

+0

일반 ID가 포함되어 있기 때문에 예를 들어'hopaopGmail4y4yu'의 정확한 값을 알 수 없습니다. 예, 쉼표가 없습니다. – user1935987

+0

죄송하지만이 답변이 아닙니다. – user1935987

1

당신이 작성한 것처럼 응답이 String 인 경우 먼저 JSON 문자열을 객체로 구문 분석해야합니다 (jQuery와 같은 라이브러리를 사용하는 경우이 변환은 jQuery에 의해 자동으로 수행되기 때문에 이미 JSON 일 것입니다).) : 코드의

for (var key in obj) { 
    console.log("key", key, "value", obj[key]); 
} 
+0

* 이후에 위와 같이 반복 할 수 있습니다. * 그 때 당신의 대답은 무엇입니까? ':)' –

+0

@PraveenKumar 예, 제 대답은 몇 초 후 였으므로이 문장을 추가했습니다. 여전히 JSON.parse 부분이 포함되어 있습니다. – MattDiMu

+0

@ T.J.Crowder 당신 말이 맞습니다. – MattDiMu

관련 문제