Dari apa yang dapat saya baca di json.org , semua string JSON harus dimulai dengan {
(curly brace), dan [
karakter (kurung siku) mewakili elemen array di JSON.
Saya menggunakan json4j
perpustakaan, dan saya mendapat input yang dimulai dengan [
, jadi saya tidak berpikir ini JSON yang valid. Saya melihat sekilas skema JSON, tetapi saya benar-benar tidak dapat menemukannya menyatakan bahwa file JSON tidak dapat memulai [
, atau hanya dapat mulai dengan {
.
Jawaban:
JSON bisa berupa array atau objek. Khusus off dari json.org:
JSON dibangun di atas dua struktur:
- Kumpulan pasangan nama / nilai. Dalam berbagai bahasa, ini diwujudkan sebagai objek, catatan, struct, kamus, tabel hash, daftar kunci, atau array asosiatif.
- Daftar nilai yang diurutkan. Dalam sebagian besar bahasa, ini diwujudkan sebagai
array, vektor, daftar, atau urutan.
Selanjutnya dijelaskan dua struktur sebagai:
Perhatikan bahwa karakter awal dan akhir masing-masing adalah kurung keriting dan kurung siku.
Edit
Dan dari sini: http://www.ietf.org/rfc/rfc4627.txt
Teks JSON adalah urutan token. Set token mencakup enam karakter struktural, string, angka, dan tiga nama literal.
Teks JSON adalah objek atau larik berseri.
Pembaruan (2014)
Pada Maret 2014, ada JSON RFC baru ( 7159 ) yang sedikit mengubah definisi (lihat halaman 4/5).
Definisi per RFC 4627 adalah: JSON-text = object / array
Ini telah diubah dalam RFC 7159 menjadi: JSON-text = ws value ws
Dimana ws
mewakili spasi putih dan value
didefinisikan sebagai berikut:
Nilai JSON HARUS berupa objek, array, angka, atau string, atau salah satu dari tiga nama literal berikut:
false null true
Jadi, jawaban untuk pertanyaannya masih ya, teks JSON dapat mulai dengan braket persegi (yaitu array). Tetapi selain objek dan array, sekarang juga bisa berupa angka, string atau nilai false
, null
atau true
.
Juga, ini telah berubah dari kutipan RFC 4627 saya sebelumnya (penekanan ditambahkan):
Teks JSON adalah urutan token. Set token mencakup enam karakter struktural, string, angka, dan tiga nama literal.
Teks JSON adalah nilai berseri . Perhatikan bahwa spesifikasi JSON tertentu sebelumnya membatasi teks JSON menjadi objek atau array. Implementasi yang hanya menghasilkan objek atau array di mana teks JSON dipanggil akan dapat dioperasikan dalam arti bahwa semua implementasi akan menerima ini sebagai teks JSON yang sesuai.
JSON-text = ws value ws
mana "Nilai JSON HARUS menjadi objek, array, angka, atau string, atau salah satu dari tiga nama literal berikut: false, null, true "per Bagian 3 (Nilai). Contoh Anda tidak memenuhi batasan tersebut dan karenanya tidak valid JSON.
Jawaban:
Jika string yang Anda parsing dimulai dengan tanda kurung kurawal ([) yang dapat Anda gunakan JSONArray.parse
untuk mendapatkan kembali objek JSONArray dan kemudian Anda dapat menggunakan di get(i)
mana saya adalah indeks dari 0 melalui JSONArray yang dikembalikan 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();
}
}
}
Yang menghasilkan output seperti:
{"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"}
Catatan: jika Anda mencoba menelepon JSONObject.parse(books.toString());
Anda akan mendapatkan kesalahan yang Anda temui:
java.io.IOException: Expecting '{' on line 1, column 2 instead, obtained token: 'Token: ['
sumber
SITUS WEB JSON.ORG ....
Situs ini dengan jelas menyatakan sebagai berikut:
JSON dibangun di atas dua struktur:
Kumpulan pasangan nama / nilai. Dalam berbagai bahasa, ini diwujudkan sebagai objek, catatan, struct, kamus, tabel hash, daftar kunci, atau array asosiatif.
Daftar nilai yang diurutkan. Dalam sebagian besar bahasa, ini diwujudkan sebagai array, vektor, daftar, atau urutan.
Ini adalah struktur data universal. Hampir semua bahasa pemrograman modern mendukungnya dalam satu bentuk atau lainnya. Masuk akal bahwa format data yang dapat dipertukarkan dengan bahasa pemrograman juga didasarkan pada struktur ini. Di JSON, mereka mengambil formulir ini:
OBYEK:
Objek adalah kumpulan pasangan nama / nilai yang tidak teratur. Objek dimulai dengan {(kurung kiri) dan berakhir dengan} (kurung kanan). Setiap nama diikuti oleh: (titik dua) dan pasangan nama / nilai dipisahkan oleh, (koma).
{string: value, string: value}
HIMPUNAN:
Array adalah kumpulan nilai yang diurutkan. Array dimulai dengan [(braket kiri) dan diakhiri dengan] (braket kanan). Nilai dipisahkan oleh, (koma).
[value, value, value ….]
NILAI:
Nilai dapat berupa string dalam tanda kutip ganda, atau angka, atau benar atau salah atau null, atau objek atau array. Struktur ini dapat disarangkan.
TALI:
String adalah urutan nol atau lebih karakter Unicode, dibungkus dengan tanda kutip ganda, menggunakan backslash escapes. Sebuah karakter direpresentasikan sebagai string karakter tunggal. Sebuah string sangat mirip string C atau Java.
JUMLAH:
Angka sangat mirip dengan angka C atau Java, kecuali bahwa format oktal dan heksadesimal tidak digunakan.
TENTANG WHITESPACE:
Spasi dapat disisipkan di antara setiap token. Kecuali beberapa detail penyandian, itu sepenuhnya menjelaskan bahasa.
sumber
[]
, parsing sebagai array, dan ambil elemen array pertama.)