相比于xml,json的主要特点是数据小,解析速度快,但是描述性差。

java中常见的json解析方法有Gson、Jackson、JSON.simple。

从解析速度上来看,Gson适合解析小数据量,Jackson适合解析大数据量的,JSON.simple解析大数据量和小数据量速率都很快。

先展示一下接下来要生成和解析的json数据:

{
"users": [
{
"phone": "138****",
"pwd": "123456",
"username": "zhangsan"
},
{
"phone": "158****",
"pwd": "abc",
"username": "lisi"
}
]
}

一、org.json

这个是android自带的解析方法。

生成:

    public static String createJson() {
JSONObject json = new JSONObject();
JSONArray jsonUsers = new JSONArray();
json.put("users", jsonUsers);
JSONObject jsonUser1 = new JSONObject();
JSONObject jsonUser2 = new JSONObject();
jsonUsers.put(jsonUser1);
jsonUsers.put(jsonUser2); jsonUser1.put("username", "zhangsan");
jsonUser1.put("pwd", "123456");
jsonUser1.put("phone", "138****"); jsonUser2.put("username", "lisi");
jsonUser2.put("pwd", "abc");
jsonUser2.put("phone", "158****");
return json.toString(); }

解析:

    public static void parseJson(String jsonStr){
JSONObject json =new JSONObject(jsonStr);
JSONArray jsonUsers=json.getJSONArray("users");
System.out.println(jsonUsers.length());
for (int i = 0; i < jsonUsers.length(); i++) {
JSONObject jsonUser=(JSONObject) jsonUsers.get(i);
System.out.print("user"+i+"[");
System.out.print("username:"+jsonUser.get("username"));
System.out.print(", pwd:"+jsonUser.get("pwd"));
System.out.println(", phone:"+jsonUser.get("phone")+"]");
}
}

二、Gson

解析:

首先得创建相应的类:

public class User {
private String phone;
private String pwd;
private String username;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User [phone=" + phone + ", pwd=" + pwd + ", username=" + username + "]";
} }

  

public class Users {
private List<User> users; public List<User> getUsers() {
return users;
} public void setUsers(List<User> users) {
this.users = users;
} @Override
public String toString() {
return "Users [users=" + users + "]";
} }

解析方法:

    public static void parseJson(String jsonStr) {
Gson gson=new Gson();
Users users=gson.fromJson(jsonStr, Users.class);
System.out.println(users); }

如何json数据整体就是一个数组,如下:

[
{
"phone": "138****",
"pwd": "123456",
"username": "zhangsan"
},
{
"phone": "158****",
"pwd": "abc",
"username": "lisi"
}
]

解析方法:

    public static void parseJson(String jsonStr) {
Gson gson=new Gson();
List<User> users;
users=gson.fromJson(jsonStr, new TypeToken<List<User>>(){}.getType());
System.out.println(users); }

生成:

    public static <T> String createJson(T t){
Gson gson=new Gson();
String rt=gson.toJson(t);
return rt; }

三、JSON.simple

    public static void parseJson(String filename) {
try {
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader(filename));
JSONObject jsonObject = (JSONObject) obj; JSONArray jsonUsers = (JSONArray) jsonObject.get("users"); Iterator<JSONObject> iterator = jsonUsers.iterator();
while (iterator.hasNext()) {
JSONObject jsonUser = iterator.next();
System.out.print("user[");
System.out.print("username:" + jsonUser.get("username"));
System.out.print(", pwd:" + jsonUser.get("pwd"));
System.out.println(", phone:" + jsonUser.get("phone") + "]");
}
} catch (IOException | ParseException e) {
e.printStackTrace();
} } public static void createJson() {
JSONObject json = new JSONObject();
JSONArray jsonUsers = new JSONArray();
json.put("users", jsonUsers);
JSONObject jsonUser1 = new JSONObject();
JSONObject jsonUser2 = new JSONObject();
jsonUsers.add(jsonUser1);
jsonUsers.add(jsonUser2); jsonUser1.put("username", "zhangsan");
jsonUser1.put("pwd", "123456");
jsonUser1.put("phone", "138****");
jsonUser2.put("username", "lisi");
jsonUser2.put("pwd", "abc");
jsonUser2.put("phone", "158****"); System.out.println(json.toJSONString());
}

json的解析和生成的更多相关文章

  1. golang xml和json的解析与生成

    golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...

  2. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  3. android Json 解析和生成

    什么是json: JSON即JavaScript Object Natation的简称,它是一种轻量级的数据交换格式,非常适合服务器与JavaScript的交互.JSON易于人阅读和编写.同时也易于机 ...

  4. Json1:使用gson解析、生成json

    Json解析: 1.json第三方解析包:json-lib.gson.jackson.fastjson等2.Google-gson只兼容jdk1.5版本以上:JSON-lib分别支持1.4和1.53. ...

  5. 转载 -- iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  6. Android原生生成JSON与解析JSON

    JSON数据是一种轻量级的数据交换格式,在Android中通常应用于client与server交互之间的传输数据.像如今在网上有非常多解析JSON数据的jar包,可是归根究竟用的都是Android原生 ...

  7. 使用gson解析,生成Json

    包:gson-2.3.jarJson文本解析为Java对象:Java对象生成为Json文本 import com.google.gson.Gson; public class TestGson { c ...

  8. JSON数据解析 基础知识及链接收集

    JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...

  9. 浅谈JSON数据解析方法

    JSON数据解析 JSON是什么?? 如何把JSON数据解析出来 如何把一个字典转换为JSON JSON详细介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交 ...

随机推荐

  1. Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程

    前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...

  2. Django中间件(中间件版登陆验证、访问频率限制)

    一.介绍 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. ...

  3. python类属性

    类属性 类属性分为共有属性和私有属性. 私有属性的定义方法eg:__age(若无次定义则默认为公有属性) 类属性举例: class people: name = "china" _ ...

  4. ch1_5_2求无序序列中第k小的元素

    import java.util.Arrays; import java.util.PriorityQueue; public class ch1_5_2求无序序列中第k小的元素 { public s ...

  5. 使用oracle序列+oracle定时任务获取每月从1开始的流水码

    --创建序列 --入库create sequence rk_seq;--出库create sequence ck_seq;--移库create sequence yk_seq; --创建存储过程 cr ...

  6. 图文详解Java对象内存布局

    作为一名Java程序员,我们在日常工作中使用这款面向对象的编程语言时,做的最频繁的操作大概就是去创建一个个的对象了.对象的创建方式虽然有很多,可以通过new.反射.clone.反序列化等不同方式来创建 ...

  7. [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.1 引言

    2.1 引言 在上一章中,介绍了降压变换器作为降低直流电压的一种方法,其仅使用非耗散开关,电感器和电容器.开关状态变换产生一个矩形波形\(v_{s}(t)\),如图2.1所示.当开关位于位置1时,该电 ...

  8. 可视化运行Python的神器Jupyter Notebook

    目录 简介 Jupyter Notebook 启动notebook server notebook document 的结构 code cells markdown cells raw cells 以 ...

  9. OOUnit1Summary

    一.前三次作业内容分析 前言 第一单元的作业以表达式求导为主题,分三次要求逐步增加,难度逐步提高.这三次作业下来,本人既有收获,也有遗憾,因此通过接下来的内容对我这三次作业进行分析和总结,希望能能为我 ...

  10. Vulkan移植GpuImage(三)从A到C的滤镜

    前面移植了几个比较复杂的效果后,算是确认了复杂滤镜不会对框架造成比较大的改动,开始从头移植,现已把A到C的所有滤镜用vulkan的ComputeShader实现了,讲一些其中实现的过程. Averag ...