可以JSON开始与[?
从json.org上可以读到的,所有的JSONstring应该以{
(花括号)开头, [
字符(方括号)表示JSON中的一个数组元素。
我使用json4j
库,我得到了一个以[
开头的input,所以我不认为这是有效的JSON。 我简单地看了一下JSON模式,但是我真的无法发现它说JSON文件不能以[
开头,或者只能以{
开头。
JSON可以是数组或对象。 特别closuresjson.org:
JSONbuild立在两个结构上:
- 名称/值对的集合。 在各种语言中,这被实现为对象,logging,结构,字典,散列表,键控列表或关联数组。
- 有序的值列表。 在大多数语言中,这被认为是一个
数组,vector,列表或序列。
然后它将这两个结构描述为:
请注意,起始和结束字符分别是大括号和方括号。
编辑
并从这里: 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或值false
, null
或true
。
另外,这已经改变了我以前的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: ['
- 如果它的名字包含点,如何得到JSON对象的值?
- 如何确定一个string是否是有效的JSON?
- 你可以在JSON对象中使用尾随逗号吗?
- AngularJS – $ http.post发送数据为json
- 在Node.js中写入格式化的JSON
- 有一个公开可用的托pipeJSON2的CDN吗?
- SEVERE:找不到媒体types= application / json的MessageBodyWriter,type = class com.jersey.jaxb.Todo,genericType = class com.jersey.jaxb.Todo
- 通过JSON发布一个对象数组到ASP.Net MVC3
- 什么是领先的LINQ for JavaScript库?