运用 三种 原生 谷歌 阿里 解析和生成json
三种类生成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;
}
@Override
public 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 不设置get
String 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;
@Override
public 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();
//生成javabean
A a = gson.fromJson(json,A.class);
//解析成List
list= 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;
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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的更多相关文章
- [教程]Delphi 中三种回调函数形式解析
Delphi 支持三种形式的回调函数 全局函数这种方式几乎是所有的语言都支持的,类的静态函数也可以归为此类,它保存的只是一个函数的代码起始地址指针( Pointer ).在 Delphi 中声明一般为 ...
- PCB板的三种敷铜方法解析
1 do not pour over all same net objects:仅仅对相同网络的焊盘进行连接,其他如覆铜.导线不连接. 2 pour over all same net objects ...
- Android Json的使用(2) 使用Jackson解析和生成json
使用Jackson的三种方式 数据绑定模式:使用最方便 流模式:性能最佳 树模式:最灵活 以最常用的数据绑定模式为例 Json数据如下 { "name" : { "fir ...
- Json1:使用gson解析、生成json
Json解析: 1.json第三方解析包:json-lib.gson.jackson.fastjson等2.Google-gson只兼容jdk1.5版本以上:JSON-lib分别支持1.4和1.53. ...
- docker的网络-单主机(三种原生网络)none、host、bridge
docker的网络分为:单主机.跨主机 这篇先说:单主机 我们先说一下docker的原生网络模式 网络模式 简介 优点 使用场景 none 空网络,没有网络 此网络与外界隔离,安全度非常高 适合公司内 ...
- 使用gson解析,生成Json
包:gson-2.3.jarJson文本解析为Java对象:Java对象生成为Json文本 import com.google.gson.Gson; public class TestGson { c ...
- 使用JSONObject解析和生成json
创建JSON 引用org.json包,推荐通过maven引用 1.直接构建 JSONObject obj = new JSONObject(); obj.put("sex", &q ...
- Json4:使用json-lib解析、生成Json
特征:1.包多2.JSONObject.fromObject import net.sf.json.JSONObject; public class JsonLib { public static v ...
- Android平台中实现对XML的三种解析方式
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
随机推荐
- bzoj 1925: [Sdoi2010]地精部落
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- poj1741Tree 点分治
上午学习了点分治,写了1个半小时终于写出一个代码--poj1741,可以说是个模板题. 分治:对于每个儿子找出重心,分别处理 注意:1.每次处理一个重心后,ans减去对它儿子的处理 原因:因为统计方法 ...
- 使用Unity NGUI-InputField组件输入时发现显示为白色就是看不到字体
今天在接入android支付宝 SDK时,打包运行时,发现使用Unity NGUI-InputField组件输入时发现显示为白色就是看不到字体,查找一下发现是与android交互存在的问题, 只需在A ...
- Centos下出现read-only file system 的解决办法
Centos下出现这种情况说明磁盘只能读不能写,出现这种情况一般是因为不正常的关机或者硬盘损坏导致磁盘挂载出现问题. 本萌新也遇到了这个问题,尝试了各种命令都不行,最后用了mount -o remou ...
- C++ 中私有继承、保护继承与公有继承
区别 下面通过一个示例来介绍三种继承的区别. 定义一个基类(假设为一个快退休的富豪): class RichMan { public: RichMan(); ~RichMan(); int m_com ...
- Qone 正式开源,使 javascript 支持 .NET LINQ
Qone 下一代 Web 查询语言,使 javascript 支持 LINQ Github: https://github.com/dntzhang/qone 缘由 最近刚好修改了腾讯文档 Excel ...
- Linux学习之CentOS(十五)----磁盘管理之 启动挂载(转)
启动挂载 /etc/fstab 及 /etc/mtab 刚刚上面说了许多,那么可不可以在启动的时候就将我要的文件系统都挂好呢?这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那 ...
- display显示方式
元素的diplay显示方式有多种,隐藏.块级.内联.内联-块级. 1.display:none 隐藏 2.display:block; 表示块级元素. 块级元素会自动在前面和后面加上换行,并且在其 ...
- 使用Web Audio API绘制音波图
摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ...
- Python安装与环境变量的配置
python下载: Python安装包下载地址:http://www.python.org/ 根据实际的操作系统,安装合适的安装版本. Python安装: 本文以python 2.7.8(64位)为例 ...