JSON에서 null 값을 반환하는 데 선호되는 방법은 무엇입니까? 프리미티브에 대해 다른 환경 설정이 있습니까?
예를 들어, 서버의 오브젝트에 값이없는 "myCount"라는 정수가있는 경우 해당 값에 대한 가장 올바른 JSON은 다음과 같습니다.
{}
또는
{
"myCount": null
}
또는
{
"myCount": 0
}
문자열에 대한 동일한 질문-서버에 null 문자열 "myString"이 있으면 최상의 JSON입니다.
{}
또는
{
"myString": null
}
또는
{
"myString": ""
}
또는 (주님 도와주세요)
{
"myString": "null"
}
JSON에서 컬렉션이 빈 컬렉션으로 표시되는 규칙을 좋아합니다. http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
빈 배열은 다음과 같습니다.
{
"myArray": []
}
편집 요약
'개인 취향'논증은 현실적으로 보이지만, 공동체로서 우리는 훨씬 더 많은 이질적인 서비스 / 소스를 소비 할 것이라는 점에서 눈에 띄지 않습니다. JSON 구조에 대한 규칙은 해당 서비스의 소비 및 재사용을 정상화하는 데 도움이됩니다. 표준을 설정하는 한 몇 가지 예외를 제외하고 대부분의 Jackson 규칙을 채택하는 것이 좋습니다.
- 프리미티브보다 객체가 선호됩니다.
- 빈 컬렉션은 null보다 선호됩니다.
- 값이없는 객체는 null로 표시됩니다.
- 프리미티브는 그 가치를 돌려줍니다.
주로 null 값을 가진 JSON 객체를 반환하는 경우 여러 서비스로 리팩토링 할 수 있습니다.
{
"value1": null,
"value2": null,
"text1": null,
"text2": "hello",
"intValue": 0, //use primitive only if you are absolutely sure the answer is 0
"myList": [],
"myEmptyList": null, //NOT BEST PRACTICE - return [] instead
"boolean1": null, //use primitive only if you are absolutely sure the answer is true/false
"littleboolean": false
}
위의 JSON은 다음 Java 클래스에서 생성되었습니다.
package jackson;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonApp {
public static class Data {
public Integer value1;
public Integer value2;
public String text1;
public String text2 = "hello";
public int intValue;
public List<Object> myList = new ArrayList<Object>();
public List<Object> myEmptyList;
public Boolean boolean1;
public boolean littleboolean;
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Data()));
}
}
메이븐 의존성 :
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
NSNull
싱글 톤 인스턴스 가있는 정의 된 클래스가 있습니다. 해당 인스턴스에 대한 참조는 JSON과 동일합니다 null
. 다른 언어도 같은 일을 할 수있을 것 같아요. 물론, 추정 된 클래스로 캐스트하기 전에 수신 된 객체의 클래스를 확인해야합니다. "널 인식"상태입니다.
Collections.emptyList()
Null
자체 유형 또는 유형의 객체에만 값을 할당 할 수 있기 때문에 (유용한) 클래스를 가질 수 없습니다 Object
.
null
클라이언트가 빈 문자열을 사용하는 것이 더 나은지 또는null
"null"이라는 단어가 포함 된 문자열을 유효한 값과 구별 할 수 없는지 고려하십시오.