질문 : JSON에서 null 표시
JSON에서 null 값을 반환하는 데 선호되는 방법은 무엇입니까? 프리미티브에 대한 다른 선호도가 있습니까?
예를 들어 서버의 개체에 값이없는 "myCount"라는 정수가있는 경우 해당 값에 대한 가장 정확한 JSON은 다음과 같습니다.
{}
또는
{
"myCount": null
}
또는
{
"myCount": 0
}
문자열에 대한 동일한 질문-서버에 null 문자열 "myString"이있는 경우 최상의 JSON입니다.
{}
또는
{
"myString": null
}
또는
{
"myString": ""
}
또는
{
"myString": "null"
}
빈 컬렉션 http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html 로 JSON에 표시되는 컬렉션에 대한 규칙을 좋아합니다.
빈 배열이 표시됩니다.
{
"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()));
}
}
Maven 종속성 :
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>
답변
각각의 구문 분석을 평가 해 보겠습니다.
http://jsfiddle.net/brandonscript/Y2dGv/
var json1 = '{}';
var json2 = '{"myCount": null}';
var json3 = '{"myCount": 0}';
var json4 = '{"myString": ""}';
var json5 = '{"myString": "null"}';
var json6 = '{"myArray": []}';
console.log(JSON.parse(json1)); // {}
console.log(JSON.parse(json2)); // {myCount: null}
console.log(JSON.parse(json3)); // {myCount: 0}
console.log(JSON.parse(json4)); // {myString: ""}
console.log(JSON.parse(json5)); // {myString: "null"}
console.log(JSON.parse(json6)); // {myArray: []}
여기에 tl; dr :
json2 변수의 조각 은 JSON 사양이 null
을 표시해야 함을 나타내는 방식입니다. 그러나 항상 그렇듯이 그것은 당신이하는 일에 달려 있습니다. 때때로 그것을하는 "올바른"방법이 당신의 상황에 항상 효과가있는 것은 아닙니다. 귀하의 판단을 사용하고 정보에 입각 한 결정을 내리십시오.
JSON1 {}
이것은 빈 객체를 반환합니다. 거기에는 데이터가 없으며 찾고있는 키 ( myCount
또는 다른 것)가 undefined
유형이라는 것을 알려줄 것입니다.
JSON2 {"myCount": null}
이 경우 myCount
null
이기는하지만 실제로 정의됩니다. 이것은 " undefined
되지 않음 및 null
아님"과 동일하지 않으며 , 한 조건 또는 다른 조건에 대해 테스트하는 경우 성공할 수 있지만 JSON1은 실패합니다.
이것은 JSON 사양에 따라 null
을 나타내는 확실한 방법입니다.
JSON3 {"myCount": 0}
이 경우 myCount는 0입니다. 이는 null
과 동일하지 않으며 false
와 동일하지 않습니다. 조건문이 myCount > 0
평가되면 가치가있을 수 있습니다. 또한 여기 값을 기반으로 계산을 실행하는 경우 0이 유용 할 수 있습니다. null
을 테스트하려는 경우 실제로는 전혀 작동하지 않습니다.
JSON4 {"myString": ""}
이 경우 빈 문자열이 표시됩니다. 다시 JSON2와 마찬가지로 정의되었지만 비어 있습니다. if (obj.myString == "")
null
또는 undefined
대해서는 테스트 할 수 없습니다.
JSON5 {"myString": "null"}
문자열 값을 null로 설정하기 때문에 문제가 발생할 수 있습니다. 이 경우 obj.myString == "null"
이지만 == null
이 아닙니다 .
JSON6 {"myArray": []}
myArray
가 존재하지만 비어 있음을 알려줍니다. myArray
에 대해 계산 또는 평가를 수행하려는 경우 유용합니다. 예를 들어, 사용자가 게시 한 사진 수를 평가하고 싶다고 가정 해 보겠습니다. myArray.length
0
: 정의가 반환되지만 게시 된 사진은 없습니다.
출처 : https://stackoverflow.com/questions/21120999/representing-null-in-json
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
CSS를 사용하여 텍스트 길이를 n 줄로 제한 (0) | 2021.07.21 |
---|---|
sleep ()의 JavaScript 버전에 대해서 (0) | 2021.07.21 |
Node.js를 시작하기 좋은 가이드 모음 (1) | 2021.07.20 |
JavaScript 소스 맵 (.map 파일)을 사용하는 방법 (0) | 2021.07.19 |
handlebars.js {{#if}} 조건부의 논리 연산자 (0) | 2021.07.19 |