相比于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. 安装RPM包或者源码包

    RPM工具 RPM他是以一种数据库记录的方式将我们所需要的套件安装到linux主机的一套管理程序关于RPM各个选项的含义如下-i:表示安装-v:表示可视化-h:表示安装进度在安装RPM包时,常用的附带 ...

  2. 官方正式发布 Java 16

    前言 就在2021/03/16,官方正式发布了Java 16.我们可以下载使用Java 16了. 特性 向量API(孵化) 在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢 ...

  3. 画直线的算法之DDA算法+代码实现(法一)

    DDA(数值微分法)基于直线微分方程生成直线. 点xi,yi满足直线方程yi=kxi+b, 若xi增加一个单位,则下一步点的位置(xi + 1,yi+1)满足yi+1=k(xi + 1)+ b. 即y ...

  4. UML和设计模式原则总结

    UML总结: uml就是统一建模语言,包括语义概念 标记符号和指南 具有静态 动态 环境上的和组织性的部分 .它不是编程语言.uml预览它涉及的主要领域有结构性(静态视图,用例视图,构件图,实现视图, ...

  5. Redis实战篇(三)基于HyperLogLog实现UV统计功能

    如果现在要开发一个功能: 统计APP或网页的一个页面,每天有多少用户点击进入的次数.同一个用户的反复点击进入记为 1 次,也就是统计 UV 数据. 让你来开发这个统计模块,你会如何实现? 如果统计 P ...

  6. (5)MySQL进阶篇SQL优化(优化数据库对象)

    1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性 ...

  7. (二)基于商品属性的相似商品推荐算法——Flink SQL实时计算实现商品的隐式评分

    系列随笔: (总览)基于商品属性的相似商品推荐算法 (一)基于商品属性的相似商品推荐算法--整体框架及处理流程 (二)基于商品属性的相似商品推荐算法--Flink SQL实时计算实现商品的隐式评分 ( ...

  8. Java读取图片exif信息实现图片方向自动纠正

    起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...

  9. 201871030118-雷云云 实验二 个人项目—D{0-1}背包问题项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业链接 我的课程学习目标 1.了解并掌握psp2.掌握软件项目个人开发流程3.掌握Github发布软件项目的操作方法 这个作业在哪些方面帮助 ...

  10. PAT B1033 旧键盘上的几个键又毁坏了,于是在输入一段文字时,对应得的字符就不会出现。

    题中可用的字母包括大小写(给出的坏键的字母,全为大写),数字,"_" "," "." "-" "+" ...