source

JSON 개체에 null 값을 넣을 수 없습니다.

ittop 2023. 3. 23. 23:10
반응형

JSON 개체에 null 값을 넣을 수 없습니다.

JSON을 사용하여 api에 파라미터를 전달하려고 합니다.

class Sample
{ ...
   String token;
...

void method()
{ ...
    JSONObject params = new JSONObject();
    params.put(KEY_TOKEN,token);
    params.put(KEY_DATE,date);

    Log.e("params ",params+"");


      ...  }    

파라메스의 가치를 알 수 있습니다.{"date":"2017-06-19"}토큰은 어디에도 보이지 않는다.토큰을 초기화하지 않았으며 인스턴스 변수로 값이 늘입니다.그럼 초기화되지 않은 값은 포함되지 않는 건가요?

문서의 첫 번째 단락에 기재된 내용은 다음과 같습니다.

값은 다음과 같을 수 없습니다.null,NaNs, infinity 또는 여기에 나열되지 않은 모든 유형.

, "...값이 포함되지 않은 것"입니다(편집: 원래 질문에서 인용한 것입니다. 갱신된 질문은 "초기화되지 않은 값"으로 변경되지만 개체 참조의 기본값은 " 입니다.)

이 클래스의 「기능」입니다만, JSON 자체는 이해하고 있습니다.null잘 돼가고 있습니다.문서 아래에는 "sentinal value"를 사용하여 다음을 나타냅니다.null그건... 이상한데?메모는 다음과 같습니다.

경고: 이 클래스는null두 가지 양립할 수 없는 방법으로:null참조 및 sentinel 값NULL특히 전화는put(name, null)오브젝트에서 이름 있는 엔트리를 삭제합니다.put(name, JSONObject.NULL)값이 다음과 같은 엔트리를 저장합니다.JSONObject.NULL.

그래서:

params.put(KEY_TOKEN, token == null ? JSONObject.NULL : token);

RFC 4627에 따르면 JSON은 다음 사항을 처리합니다.null유효한 값으로 지정합니다.

문제는 JSON이nullJavascript에 대한 표현입니다.nullvalue. 이와는 대조적으로 자바 버전의null(전문가들에 따르면) Javascript와 더 밀접하게 일치한다.undefined가치.

의 원저작자org.json도서관은 이라고 결정했다.JSONObjectJSON을 치료해야 합니다.nullJavascript의 의미와 일치하는 방식으로.따라서 (Java에서는) 다음과 같이 표시됩니다.JSONObject.NULL...와 동등하지 않다null.

이 문제를 해결하기 위해 다음 수업에서JSONObject메서드를 덮어씁니다.put사용하다JSONObject.NULL전달된 객체가null

public class ObjectJSON extends JSONObject {
    public JSONObject put(String key, Object value) throws JSONException {
        return super.put(key, value == null ? JSONObject.NULL : value);
    }
}

문자열 표현을 사용하여 늘 값을 객체에 채워넣는 방법으로 늘 JSON 값을 생성하여 이 문제를 해결했습니다.분명히 해킹이지만, 효과가 있어요.

JSONObject obj = new JSONObject("{\"keyword\": null}");
System.out.println(obj); // {"keyword": null}

Json 자체는 null로 간주되지만 JSONOBJECT 클래스는 그렇지 않습니다.따라서 당신은 그것을 할 수 없습니다.또한 json과 객체 매핑에 Jackson/gson을 대신 사용해 보십시오.도움이 필요하시면 말씀하세요.

저는 이 '솔루션'을 수정하고 이 프로젝트를 만들었습니다.https://github.com/leonardofel/JSON-java-put-null-fix

다음 코드를 해제하십시오.

JSONObject j = new JSONObject().put("myPreciousNull", null);
System.out.println(j.toString());

인쇄:

{"myPreciousNull":null}

언급URL : https://stackoverflow.com/questions/44631604/unable-to-put-null-values-in-json-object

반응형