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
,NaN
s, 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이null
Javascript에 대한 표현입니다.null
value. 이와는 대조적으로 자바 버전의null
(전문가들에 따르면) Javascript와 더 밀접하게 일치한다.undefined
가치.
의 원저작자org.json
도서관은 이라고 결정했다.JSONObject
JSON을 치료해야 합니다.null
Javascript의 의미와 일치하는 방식으로.따라서 (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