运用 三种 原生 谷歌 阿里 解析和生成json
来源:互联网 发布:silverlight mac版本 编辑:程序博客网 时间:2024/05/29 03:02
三种类生成JSON数据方法
JSON(原生):
第一种
JSONStringer和JSONObject区别在于添加对象时是按顺序添加的比如说 JSONStringer 添加 a:1 b:2 c:3那么生成的也是{a:1,b:2,c:3},而JSONObject不保证有可能为{c:3,a:1,b:2}
package com.fmy.bit.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.test.AndroidTestCase;public class TestDemo extends AndroidTestCase{/** * 原声JSONObject类生成JSON的数据的方法一 */public void test(){JSONObject root = new JSONObject();try {//放入obj方法1: 键:name 值:小 root.put("name", "小");//放入obj方法2:放入 obj 中一个对象 键:name 值:小 JSONObject obj = new JSONObject();obj.put("name1", "大");obj.put("name2", "大");root.put("obj", obj);JSONArray array = new JSONArray();//添加到数组的那个位置 如果前面没有那么直接为null填充前方的值array.put(3, "33");array.put(4, "33");array.put("33");root.put("array", array);} catch (JSONException e) {e.printStackTrace();}}}
输出的JSON:
{"name":"小","obj":{"name1":"大","name2":"大"},"array":[null,null,null,"33","33","33"]}
GSON(谷歌)
支持直接json解析成javabeen 也支持javabeen解析成json 底层运用反射机制打破封装性,即你对象哪怕是私有的不设置set方法依然赋值。阿里巴巴必须设置Get和set方法且方法名必须符合规范
代码如下:
package com.fmy.bit.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONStringer;import com.google.gson.Gson;import android.test.AndroidTestCase;class A{List<String> list;String name ;int age;}public class TestDemo extends AndroidTestCase{public void test(){A a = new A();a.list = new ArrayList<String>();a.list.add("我是数组1");a.list.add("我是数组2");a.list.add("我是数组3");a.name = "name";a.age =15;try {Gson gson = new Gson();String json = gson.toJson(a);System.out.println(json);System.out.println(json);System.out.println(json);} catch (Exception e) {e.printStackTrace();}}}
输出 {"age":15,"list":["我是数组1","我是数组2","我是数组3"],"name":"name"} 体现GSON反射机制代码:
package com.fmy.test;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import com.google.gson.Gson;class A {private String name;private int age;public int getAge() {return age;}public A(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "A [name=" + name + ", age=" + age + "]";}}public class Test {public static void main(String[] args) {Gson gson = new Gson();String name = "{'':'张三','age':18}";A a = new A("张三",18);String json1 = gson.toJson(a);//阿里巴巴的json必须设置get方法不然无数据 这里给age设置 name 不设置getString json2 = JSON.toJSONString(a);System.out.println("json1"+json1);System.out.println("json2"+json2);}}
输出: json1{"name":"张三","age":18} json2{"age":18}
生成一个json数组代码
注意反射 不经过set get方法
package com.fmy.test;import java.util.ArrayList;import java.util.List;import com.google.gson.Gson;class A{String name ;int age;public A(String name, int age) {super();this.name = name;this.age = age;}}public class Test {private static List<A> list;public static void main(String[] args) {Gson gson = new Gson();list = new ArrayList<A>();list.add(new A("S", 18));list.add(new A("S", 18));String json = gson.toJson(list);System.out.println(json);}}
输出
[{"name":"S","age":18},{"name":"S","age":18}]
fastjson 阿里巴巴
支持javabeen直接生成json 也可以json生成javabean,需要写对get和set方法
package com.fmy.bit.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONStringer;import com.alibaba.fastjson.JSON;import com.google.gson.Gson;import android.test.AndroidTestCase;class A{List<String> list;String name ;int age;}public class TestDemo extends AndroidTestCase{public void test(){A a = new A();a.list = new ArrayList<String>();a.list.add("我是数组1");a.list.add("我是数组2");a.list.add("我是数组3");a.name = "name";a.age =15;try {String json = JSON.toJSONString(a);System.out.println(json);System.out.println(json);System.out.println(json);} catch (Exception e) {e.printStackTrace();}}}
输出一个json数组:
三种类解析JSON
JSON(原生):
第一种
代码:
package com.fmy.bit.test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONStringer;import com.alibaba.fastjson.JSON;import com.google.gson.Gson;import android.test.AndroidTestCase;class A{List<String> list;String name ;int age;}public class TestDemo extends AndroidTestCase{public void test() throws JSONException{String json ="{'a':1,'b':'nihao',\"ds\":[\"s\",{'a':2}]}";JSONObject root = new JSONObject(json);int a = root.getInt("a");String b = root.getString("b");JSONArray array = root.getJSONArray("ds");String s = array.getString(0);JSONObject obj = array.getJSONObject(1);String aa = obj.getString("a");System.out.println("a:"+a+" b:"+b+" array"+array+" s:"+s+" aa:"+aa);System.out.println("a:"+a+" b:"+b+" array"+array+" s:"+s+" aa:"+aa);System.out.println("a:"+a+" b:"+b+" array"+array+" s:"+s+" aa:"+aa);}}
输出结果
a:1 b:nihao array["s",{"a":2}] s: s aa:2
GSON(谷歌)
代码:
package com.fmy.bit.test;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import org.json.JSONException;import android.test.AndroidTestCase;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;class A{List<String> list;String name ;int age;@Overridepublic String toString() {return "A [list=" + list + ", name=" + name + ", age=" + age + "]";}}public class TestDemo extends AndroidTestCase{public void test() throws JSONException{String json ="{'age':1,'name':'张三',\"list\":[\"s\"]}";String json2 ="['张三','李四','王万']";String json3 ="[{'张三':1,'李四':2},{'李四':2},{'王万':3}]";List<String>list;Gson gson = new Gson();//生成javabeanA a = gson.fromJson(json,A.class);//解析成Listlist= gson.fromJson(json2, new TypeToken<List<String>>(){}.getType() );//List中包含对象List<Map<String,String>> list2=gson.fromJson(json3, new TypeToken<List<Map<String,String>>>(){}.getType());System.out.println(a);System.out.println(list);System.out.println(list2);}}
输出:
A [list=[s], name=张三, age=1] [张三, 李四, 王万] [{张三=1, 李四=2}, {李四=2}, {王万=3}]
fastjson(阿里巴巴)
解析时必须设置set方法 生成时json时必须有get方法
代码:
package com.fmy.test;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import com.google.gson.Gson;class A {private String name;private int age;public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "A [name=" + name + ", age=" + age + "]";}}public class Test {public static void main(String[] args) {Gson gson = new Gson();String name = "{'name':'张三','age':18}";// 必须设置set方法 如果一个都不匹配报错//匹配一个以上不报错 ,但是无法生成 没有设置set的数据A a = JSON.parseObject(name, A.class);// System.out.println("json1"+json1);System.out.println(a);}}
输出 A [name=null, age=18]
上面的正确写法
package com.fmy.test;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import com.google.gson.Gson;class A {private String name;private int age;public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "A [name=" + name + ", age=" + age + "]";}}public class Test {public static void main(String[] args) {Gson gson = new Gson();String name = "{'name':'张三','age':18}";// 必须设置set方法 如果一个都不匹配报错//匹配一个以上不报错 ,但是无法生成 没有设置set的数据A a = JSON.parseObject(name, A.class);// System.out.println("json1"+json1);System.out.println(a);}}
输出
A [name=张三, age=18]
生成一个解析数组json的方法生成list:
package com.fmy.test;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import com.google.gson.Gson;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();String string = "['a','b']"; list = JSON.parseArray(string,String.class);// System.out.println("json1"+json1);System.out.println(list);}}
输出 [a, b] 如果含有对象
package com.fmy.test;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import com.google.gson.Gson;class A {private String name;private int age;public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "A [name=" + name + ", age=" + age + "]";}}public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();String string = "[{'name':'章撒','age':15},{'name':'章撒2','age':215}]";//List<A> parseObject = JSON.parseObject(string,new TypeReference<List<A>> (){});List<A> parseObject = JSON.parseArray(string, A.class);// System.out.println("json1"+json1);System.out.println(parseObject);}}
输出>
[A [name=章撒, age=15], A [name=章撒2, age=215]]
如果解析json数组中想让list放入Map对象 如List<Map<String,object>> 使用代码
package com.fmy.test;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import com.google.gson.Gson;class A {private String name;private int age;public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "A [name=" + name + ", age=" + age + "]";}}public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();String string = "[{'name':'章撒','age':15},{'name':'章撒2','age':215}]";List<Map<String,Object>> parseObject = JSON.parseObject(string,new TypeReference<List<Map<String,Object>>> (){});//System.out.println(parseObject);}}
输出
[{name=章撒, age=15}, {name=章撒2, age=215}]
- 运用 三种 原生 谷歌 阿里 解析和生成json
- 三种解析方式(Gson ,json原生, 混合解析)
- Android原生生成JSON与解析JSON
- json生成和解析
- json 解析和生成
- json解析和生成
- 生成和解析json
- json-原生json解析
- 运用框架的Json和Gson解析
- 简单原生json串的解析与生成(对象 数组)
- Android-json解析(三):原生JSONObject+JSONArray的使用
- JSON原生解析
- Android原生Json解析
- android json原生解析
- Json原生解析
- JSON原生解析
- 原生的JSON解析
- 原生JAVA解析json
- springmvc的ModelAttribute注解
- 沟通的目的
- PAT 1013. Battle Over Cities (25)(孤岛的个数,DFS或者BFS)
- schedule、scheduleAtFixedRate和scheduleWithFixedDelay的区别
- Rotate Image
- 运用 三种 原生 谷歌 阿里 解析和生成json
- 对称加密和非对称加密
- 通过Controller返回到jsp页面后,图片、css样式等消失了
- iOS扬声器和听筒模式的切换以及距离传感器红外感应的设置
- lintcode-螺旋矩阵 II
- activemq安全设置—设置admin的用户名和密码
- Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompa
- 25. Reverse Nodes in k-Group(23.53%)
- EventBus使用详情、源码分析和注意事项