JSON数据的生成和解析
2014-08-15 17:27
309 查看
JSON解析类可以分为以下几个类
JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:newJSONObject().put("JSON",
"Hello, World!")。Value类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。
JSONStringer:json文本构建类,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个 JSONStringer实体只能对应创建一个JSON text。
JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔,例如:[value1,value2,value3]。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULLobject。
JSONTokener:json解析类
JSONException:json中用到的异常
示例:
用JSONObject构建json
得到的json数据为:
{"id":"1","name":"李磊","age":"30"}
用JSONArray构建json数组
得到这样的数据
{"persons":[{"id":"1","age":"30","name":"李磊"},{"id":"2","age":"25","name":"韩梅梅"}]}
用JSONStringer构建json
得到了这样的数据{"id":"1","name":"李磊","age":"30"}
用JSONStringer构建json数组
生成的字符串
{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]}
解析JSON数据
解析一个最简单的json数据 数据为{"id":"1","name":"李磊","age":"30"}
解析带有数组的数据
JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:newJSONObject().put("JSON",
"Hello, World!")。Value类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。
JSONStringer:json文本构建类,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个 JSONStringer实体只能对应创建一个JSON text。
JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔,例如:[value1,value2,value3]。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULLobject。
JSONTokener:json解析类
JSONException:json中用到的异常
示例:
用JSONObject构建json
<span style="font-size:18px;">public StringcreateJson(){ try{ JSONObject jsonObject=newJSONObject(); jsonObject.put("id","1"); jsonObject.put("name","李磊"); jsonObject.put("age",30); return jsonObject.toString(); }catch(Exception e){ e.printStackTrace(); } return ""; }</span>
得到的json数据为:
{"id":"1","name":"李磊","age":"30"}
用JSONArray构建json数组
<span style="font-size:18px;">public String createJson() { List<Person> persons = getTestValues(); try { JSONObjectjsonObject = new JSONObject(); JSONArrayarray = new JSONArray(); for (int i = 0;i < persons.size(); i++) { JSONObject person = new JSONObject(); Person p= persons.get(i); person.put("id", p.getId()); person.put("name", p.getName()); person.put("age", p.getAge()); array.put(person); } jsonObject.put("persons", array); System.out.println(jsonObject.toString()); returnjsonObject.toString(); } catch(Exception e) { // TODOAuto-generated catch block e.printStackTrace(); } return""; }</span>
得到这样的数据
{"persons":[{"id":"1","age":"30","name":"李磊"},{"id":"2","age":"25","name":"韩梅梅"}]}
用JSONStringer构建json
<span style="font-size:18px;">public String createJson() { JSONStringerjsonStringer = new JSONStringer(); //新建JSONStringer对象 try { jsonStringer.object(); //调用object()方法说明开始创建添加了头{(当然,要和endobject成对出现) jsonStringer.key("id").value("1"); //添加一个属性通过key("name")添加了属性了名称 通过value("value") 添加了属性的值 jsonStringer.key("name").value("李磊"); jsonStringer.key("age").value("30"); jsonStringer.endObject();//调用endobject()方法通知json创建完毕 System.out.println(jsonStringer.toString()); } catch (Exception e) { e.printStackTrace(); } return jsonStringer.toString(); }</span>
得到了这样的数据{"id":"1","name":"李磊","age":"30"}
用JSONStringer构建json数组
<span style="font-size:18px;">public String createJson() { List<Person> persons = getTestValues(); JSONStringerjsonStringer = new JSONStringer(); try { jsonStringer.object();//创建一个新的JSONStringer对象用来存储生成的json数据 jsonStringer.key("persons"); //调用key("persons")添加数组的key值 jsonStringer.array(); //调用array()通知系统接下来的是一个数组 (和endarray()一起出现) for (int i =0; i < persons.size(); i++) { Personperson = persons.get(i); jsonStringer.object();//在循环内部通过object()方法 创建一对{} 然后将属性添加到大括号内 jsonStringer.key("id").value(person.getId()); jsonStringer.key("name").value(person.getName()); jsonStringer.key("age").value(person.getAge()); jsonStringer.endObject(); } jsonStringer.endArray(); jsonStringer.endObject(); System.out.println(jsonStringer.toString()); } catch(Exception e) { e.printStackTrace(); } returnjsonStringer.toString(); }</span>
生成的字符串
{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]}
解析JSON数据
解析一个最简单的json数据 数据为{"id":"1","name":"李磊","age":"30"}
<span style="font-size:18px;">public Person parserJson() { // TODO Auto-generated method stub String json ="{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"}"; Person person = new Person(); try { 将json字符串转换为jsonTokener对象 JSONTokener jsonTokener = newJSONTokener(json); // 此时还未读取任何json文本,直接读取就是一个JSONObject对象。 如果此时的读取位置在"name": 了,那么nextValue就是"李磊"(String) 调用jsonTokener的nextValue()方法 将json数据转换为jsonObject对象 JSONObject jsonObject = (JSONObject)jsonTokener.nextValue(); 通过getString(keyname)获取需要的值 person.setId(jsonObject.getString("id")); person.setName(jsonObject.getString("name")); person.setAge(jsonObject.getString("age")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return person; }</span>
解析带有数组的数据
<span style="font-size:18px;">{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]} public List<Person> parserJson() { String json ="{\"persons\":[{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"},{\"id\":\"2\",\"name\":\"韩梅梅\",\"age\":\"25\"}]}"; 创建一个list 用来存储解析的信息 List<Person> persons = new ArrayList<Person>(); try { 将json字符串转换为jsonTokener对象,再转换为jsonObject对象 JSONTokenerjsonTokener = new JSONTokener(json); JSONObject jsonObject = (JSONObject)jsonTokener.nextValue(); 通过getJSONArray("persons")获取json数组 JSONArray array =jsonObject.getJSONArray("persons"); for (int i = 0; i < array.length(); i++){ 通过循环解析json数组 JSONObject object =array.getJSONObject(i); Person person = new Person(); person.setId(object.getString("id")); person.setName(object.getString("name")); person.setAge(object.getString("age")); persons.add(person); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return persons; } </span>
相关文章推荐
- 如何使用JSON Framework库解析与生成json数据
- JSON数据生成与解析
- 利用gson解析和生成json数据(一)
- fastjson生成和解析json数据
- 前台利用javascript解析Json数据,生成编码折线
- Android 生成和解析JSON数据
- 【Android网络开发の4】解析和生成JSON数据
- 利用gson解析和生成json数据(二)
- fastjson生成和解析json数据
- fastjson生成和解析json数据,序列化和反序列化数据
- jquery 解析json数据 并动态生成li数据
- 如何使用JSON Framework库解析与生成json数据
- JQuery插件第三十六个:简单解析json生成数据表格
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- 如何使用JSON Framework库解析与生成json数据(iphone网络篇二)
- Android解析JSON方式(一)服务器端生成JSON数据
- 【Android网络开发の4】解析和生成JSON数据
- jquery 解析json数据 并动态生成li数据
- FastJson生成和解析JSON数据
- Android开发之JSON数据解析和生成