2011-03-30 7 views
15

json을 반환하고 json을 로컬 변수에 저장하는 웹 서비스를 사용하고 있습니다. 그것은 우리의 명명 규칙에 따라, 닷넷 클래스의 속성 이름과 함께 일치하기 때문에 케이스가 같다JSON.stringify, 대소 문자 바꾸기

var entry = { 
    "FirstName": "John", 
    "LastName": "Doe", 
    .... 
}; 

: 같은 JSON은 단순한 비즈니스 객체를 나타냅니다.

이러한 속성 중 일부를 변경하고 json을 패스하면 웹 서비스는 초기에 반환 된 파스칼 대소 문자 대신에 camel case (메서드 매개 변수의 명명 규칙에 따라)를 기대합니다.

var entry = { 
    "firstName": "John", 
    "lastName": "Doe", 
    .... 
}; 

물론 이것은 작동하지 않습니다.

나는 웹 서비스에 json을 문자열로 보내기 위해 JSON.stringify을 사용하고 있으며, 낙타의 경우 키를 변경하는 쉬운 방법이 있는지보고 싶었습니다. 그러나, 나는 그 값으로 작업하기 위해 replacer param 만 사용할 수있는 것처럼 보입니다.

클래스의 serialization을 변경할 수는 있지만 옵션이 아닌 척할 수 있습니다. 어떤 아이디어?

감사합니다.

+2

JSON을 원래 반환 된 객체 (구조체 또는 클래스)와 정확히 일치하는 복합 유형으로 웹 서비스에 다시 보내지 않는 이유가 있습니까? 이 방법으로 메서드 매개 변수를 원하는대로 호출 할 수 있으며 "이름 바꾸기"개체 속성을 사용할 필요가 없습니다. – iivel

+0

백엔드를 수정하십시오. 귀하의 명명 규칙이 당신에게 불리하게 작용하고, 명명 규칙에 부정 행위가 생기는 것 같습니다. – Thanatos

답변

28

쓰기 전에 JSON 대체기를 사용하여 키를 전환 할 수 있습니다.

JSON.stringify(myVal, function (key, value) { 
    if (value && typeof value === 'object') { 
    var replacement = {}; 
    for (var k in value) { 
     if (Object.hasOwnProperty.call(value, k)) { 
     replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k]; 
     } 
    } 
    return replacement; 
    } 
    return value; 
}); 

반대의 경우 JSON 리버브를 사용할 수 있습니다.

JSON.parse(text, function (key, value) { 
    if (value && typeof value === 'object') 
     for (var k in value) { 
     if (/^[A-Z]/.test(k) && Object.hasOwnProperty.call(value, k)) { 
      value[k.charAt(0).toLowerCase() + k.substring(1)] = value[k]; 
      delete value[k]; 
     } 
     } 
     return value; 
    }); 

두 번째 선택적 인수는 구문 분석의 일부로 작성된 모든 값 또는 작성하려고하는 모든 값으로 호출되는 함수입니다. 이러한 구현은 단순히 대문자가있는 문자의 첫 문자를 키와 소문자로 반복합니다.

http://json.org/js.html에서 대체물 및 revivers에 대한 문서가있다 :

옵션 자극성 매개 변수는 최종 결과의 모든 수준에서 모든 키와 값을 호출하는 기능입니다. 각 값은 재생기 기능의 결과로 대체됩니다. 이것은 일반 객체를 가상 클래스의 인스턴스로 개조하거나 날짜 문자열을 Date 객체로 변환하는 데 사용할 수 있습니다.

stringifier 메서드는 선택적 replacer 함수를 사용할 수 있습니다. 구조체의 각 값에 toJSON 메소드 (있는 경우)가 호출됩니다. 각 키와 값이 매개 변수로 전달되며 키를 보유하는 객체에 바인딩됩니다. 반환 된 값은 문자열로 나타납니다.

+0

업데이트를 위해 웹 서비스에 다시 보내기 전까지 json 객체를 다루고 있습니다. json 객체를 가져 와서 stringify를 호출 한 다음 다시 구문 분석해야한다는 의미는 아닙니까? – ScottE

+0

그건 꽤 똑똑한 대답입니다. – mVChr

+0

@ScottE, 예. 미안해, 너의 질문 뒷문이야. 재분석 할 필요가 없습니다.stringify 경우를 포함하도록 수정되었습니다. –