json.org 에서 읽을 수있는 모든 JSON 문자열은 {
중괄호로 시작해야 하며 [
문자 (대괄호)는 JSON의 배열 요소를 나타냅니다.
json4j
라이브러리를 사용하고로 시작하는 입력을 받았 [
으므로 이것이 유효한 JSON이라고 생각하지 않았습니다. JSON 스키마를 간단히 살펴 보았지만 실제로 JSON 파일로 시작할 수 없거나 [
로만 시작할 수 있다고 언급하지 못했습니다 {
.
답변
JSON은 배열이거나 객체 일 수 있습니다. json.org에서 구체적으로 :
JSON은 두 가지 구조로 구축됩니다.
- 이름 / 값 쌍의 모음입니다. 다양한 언어에서 이것은 객체, 레코드, 구조체, 사전, 해시 테이블, 키 목록 또는 연관 배열로 실현됩니다.
- 정렬 된 값 목록. 대부분의 언어에서 이는
배열, 벡터, 목록 또는 시퀀스 로 실현됩니다 .
그런 다음 두 구조를 다음과 같이 설명합니다.
시작 및 끝 문자는 각각 중괄호와 대괄호입니다.
여기에서 편집 하십시오 : http://www.ietf.org/rfc/rfc4627.txt
JSON 텍스트는 일련의 토큰입니다. 토큰 세트에는 6 개의 구조 문자, 문자열, 숫자 및 3 개의 리터럴 이름이 포함됩니다.
JSON 텍스트는 직렬화 된 객체 또는 배열입니다.
업데이트 (2014)
2014 년 3 월 현재, 정의를 약간 수정 하는 새로운 JSON RFC ( 7159 )가 있습니다 (4/5 페이지 참조).
RFC 4627에 따른 정의는 다음과 같습니다. JSON-text = object / array
RFC 7159에서 다음과 같이 변경되었습니다. JSON-text = ws value ws
여기서 ws
공백을 나타내며 value
다음과 같이 정의됩니다.
JSON 값은 객체, 배열, 숫자 또는 문자열이거나 다음 세 가지 리터럴 이름 중 하나 여야합니다.
false null true
따라서 질문에 대한 대답은 여전히 그렇습니다 .JSON 텍스트는 대괄호 (예 : 배열)로 시작할 수 있습니다. 그러나 객체 및 배열에 추가하여, 지금 또한 숫자, 문자열 또는 값이 될 수 있습니다 false
, null
또는 true
.
또한 이것은 이전 RFC 4627 인용문 (강조 추가)에서 변경되었습니다.
JSON 텍스트는 일련의 토큰입니다. 토큰 세트에는 6 개의 구조 문자, 문자열, 숫자 및 3 개의 리터럴 이름이 포함됩니다.
JSON 텍스트는 직렬화 된 값 입니다. JSON의 특정 이전 사양에서는 JSON 텍스트를 객체 또는 배열로 제한했습니다. JSON 텍스트가 호출되는 객체 또는 배열 만 생성하는 구현은 모든 구현이이를 일치하는 JSON 텍스트로 허용한다는 의미에서 상호 운용 가능합니다.
답변
구문 분석하는 문자열이 왼쪽 괄호 ([)로 시작 JSONArray.parse
하는 경우 JSONArray 객체를 가져 오는 데 사용할 수 있으며 get(i)
여기서 i 는 0에서 반환 된 JSONArray를 통해 인덱스입니다 size()-1
.
import java.io.IOException;
import com.ibm.json.java.JSONArray;
import com.ibm.json.java.JSONObject;
public class BookListTest {
public static void main(String[] args) {
String jsonBookList = "{\"book_list\":{\"book\":[{\"title\":\"title 1\"},{\"title\":\"title 2\"}]}}";
Object book_list;
try {
book_list = JSONObject.parse(jsonBookList);
System.out.println(book_list);
Object bookList = JSONObject.parse(book_list.toString()).get("book_list");
System.out.println(bookList);
Object books = JSONObject.parse(bookList.toString()).get("book");
System.out.println(books);
JSONArray bookArray = JSONArray.parse(books.toString());
for (Object book : bookArray) {
System.out.println(book);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
다음과 같은 출력을 생성했습니다.
{"book_list":{"book":[{"title":"title 1"},{"title":"title 2"}]}}
{"book":[{"title":"title 1"},{"title":"title 2"}]}
[{"title":"title 1"}, {"title":"title 2"}]
{"title":"title 1"}
{"title":"title 2"}
참고 : 전화를 걸면 JSONObject.parse(books.toString());
오류가 발생합니다.
java.io.IOException: Expecting '{' on line 1, column 2 instead, obtained token: 'Token: ['
답변
JSON.ORG 웹 사이트 SAYS ….
이 사이트에는 다음이 명확하게 명시되어 있습니다.
JSON은 두 가지 구조로 구축됩니다.
-
이름 / 값 쌍의 모음입니다. 다양한 언어에서 이것은 객체, 레코드, 구조체, 사전, 해시 테이블, 키 목록 또는 연관 배열로 실현됩니다.
-
정렬 된 값 목록. 대부분의 언어에서 이는 배열, 벡터, 목록 또는 시퀀스로 실현됩니다.
이들은 보편적 인 데이터 구조입니다. 사실상 모든 현대 프로그래밍 언어는 한 형태로 지원합니다. 프로그래밍 언어와 호환 가능한 데이터 형식도 이러한 구조를 기반으로합니다. JSON에서는 다음과 같은 형식을 취합니다.
목적:
객체는 순서가없는 이름 / 값 쌍 세트입니다. 객체는 {(왼쪽 괄호)로 시작하고} (오른쪽 괄호)로 끝납니다. 각 이름 뒤에는 🙁 콜론)이 있고 이름 / 값 쌍은, (쉼표)로 구분됩니다.
{string: value, string: value}
정렬:
배열은 정렬 된 값 모음입니다. 배열은 [(왼쪽 대괄호)로 시작하고] (오른쪽 대괄호)로 끝납니다. 값은, (쉼표)로 구분됩니다.
[value, value, value ….]
값:
값은 큰 따옴표로 묶은 문자열이거나 숫자이거나 true 또는 false 또는 null이거나 객체 또는 배열 일 수 있습니다. 이러한 구조는 중첩 될 수 있습니다.
끈:
문자열은 백 슬래시 이스케이프를 사용하여 큰 따옴표로 묶은 0 개 이상의 유니 코드 문자 시퀀스입니다. 문자는 단일 문자열로 표시됩니다. 문자열은 C 또는 Java 문자열과 매우 유사합니다.
번호:
숫자는 8 진수 및 16 진수 형식이 사용되지 않는다는 점을 제외하면 C 또는 Java 숫자와 매우 유사합니다.
화이트 스페이스 정보 :
임의의 토큰 쌍 사이에 공백을 삽입 할 수 있습니다. 몇 가지 인코딩 세부 사항을 제외하고 언어를 완전히 설명합니다.