可以JSON开始与[?

从json.org上可以读到的,所有的JSONstring应该以{ (花括号)开头, [字符(方括号)表示JSON中的一个数组元素。

我使用json4j库,我得到了一个以[开头的input,所以我不认为这是有效的JSON。 我简单地看了一下JSON模式,但是我真的无法发现它说JSON文件不能以[开头,或者只能以{开头。

JSON可以是数组或对象。 特别closuresjson.org:

JSONbuild立在两个结构上:

  • 名称/值对的集合。 在各种语言中,这被实现为对象,logging,结构,字典,散列表,键控列表或关联数组。
  • 有序的值列表。 在大多数语言中,这被认为是一个
    数组,vector,列表或序列。

然后它将这两个结构描述为: 一个JSON对象一个JSON数组

请注意,起始和结束字符分别是大括号和方括号。

编辑
并从这里: http : //www.ietf.org/rfc/rfc4627.txt

JSON文本是一个令牌序列。 这组记号包括六个结构字符,string,数字和三个文字名称。

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值必须是一个对象,数组,数字或string,或以下三个文字名称之一:

 false null true 

所以,问题的答案仍然是,JSON文本可以以方括号(即数组)开始。 但除了对象和数组之外,它现在也可以是数字,string或值falsenulltrue

另外,这已经改变了我以前的RFC 4627报价(强调增加):

JSON文本是一个令牌序列。 这组记号包括六个结构字符,string,数字和三个文字名称。

JSON文本是一个序列化的 。 请注意,某些以前的JSON规范将JSON文本约束为对象或数组。 只生成对象或数组的JSON文本被调用的实现将是可互操作的,因为所有实现都将接受这些JSON文本。

如果你正在parsing的string以左大括号([)开始,你可以使用JSONArray.parse来获取一个JSONArray对象,然后你可以使用get(i) ,其中是从0到返回的JSONArray size()-1的索引。 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: ['