JavaSE18章_JSON解析详解
一、JSON简介
JSON(JavaScript Object Notation),是一种轻量级的数据交换格式。JSON是存储和交换文本信息的,语法类似 XML。易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使JSON比XML更小、更快,更易解析。用了类似于C语言家族的习惯,这些特性使JSON成为理想的数据交换语言。
二、JSON语法
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。

数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

示例:
{
"name":"小明",
"age":20,
"car":false,
"aihao":[{"id":1,"name":" 上网"},{"id":2,"name":"看电影"}],
"zy":["Java","C++"],
"注释":"这个是注释"
}
三、JSON解析
1、常用的json解析,导入json-org.jar包,下载地址 https://github.com/stleary/JSON-java,示例代码如下
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class JsonReader { public static void main(String[] args) throws IOException, JSONException { //使用输入流,读取json文件
BufferedReader br = new BufferedReader(new FileReader("person.json"));
String str;
StringBuilder sb = new StringBuilder();
while((str=br.readLine())!=null){
sb.append(str);
}
br.close(); //实例化JSONObject,把json文件转为字符串形式来解析
JSONObject obj = new JSONObject(sb.toString());
System.out.println("姓名:"+obj.getString("name"));
System.out.println("年龄:"+obj.getInt("age"));
System.out.println("是否有车:"+obj.getBoolean("car")); //数组内的值为对象时,强转为JSONObject类型
JSONArray arr = obj.getJSONArray("aihao");
for (int i = 0; i < arr.length(); i++) {
JSONObject arrObj = (JSONObject) arr.get(i);
System.out.print("爱好"+arrObj.getInt("id")+":");
System.out.println(arrObj.getString("name"));
} //数组内的值为字符串时,强转为String类型
JSONArray arr2 = obj.getJSONArray("zy");
for (int i = 0; i < arr2.length(); i++) {
String s = (String) arr2.get(i);
System.out.println(s);
} System.out.println(obj.getString("注释")); } }
2、写出json文件
package com.zhidi.gjson; import java.util.HashMap;
import java.util.Map; import org.json.JSONException;
import org.json.JSONObject; public class WriterJson { public static void main(String[] args) throws JSONException {
// WriterJson.JsonObject();
// WriterJson.JsonByMap();
WriterJson.JsonByJavaBean(); } public static void JsonObject() throws JSONException{
JSONObject obj = new JSONObject();
Object objnull = null;
obj.put("name", "小明");
obj.put("age", 20);
obj.put("car", objnull);
obj.put("zy", new String[]{"Java","C++"});
System.out.println(obj.toString());
} public static void JsonByMap(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "小明");
map.put("age", 20);
map.put("car", false);
map.put("skill", new String[]{"挖掘机","厨师"});
JSONObject obj = new JSONObject(map);
System.out.println(obj.toString());
} public static void JsonByJavaBean(){
Person p = new Person();
p.setName("小明");
p.setAge(20);
p.setZy(new String[]{"Java","C++"}); System.out.println(new JSONObject(p).toString());
} }
3、使用GSON解析,导入gson-2.3.1.jar包
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL; import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException; public class GJSONReaderDemo { public static void main(String[] args) throws JsonIOException, JsonSyntaxException, IOException {
URL url = new URL("http://www.weather.com.cn/data/sk/101010100.html");
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(isr);
String str ;
StringBuilder sb = new StringBuilder();
while((str=br.readLine())!=null){
sb.append(str);
}
br.close();
isr.close();
is.close();
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(sb.toString());
JsonObject obj = object.get("weatherinfo").getAsJsonObject();
System.out.println(obj.get("city").getAsString());
System.out.println(obj.get("WD").getAsString()); } }
4、使用GSON写出json文件
import java.lang.reflect.Field;
import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject; public class GJSONWriterDemo { public static void main(String[] args) { // GJSONWriterDemo.JavaBean();
GJSONWriterDemo.JavaBean2();
// GJSONWriterDemo.JsonObj();
} public static void JavaBean(){
Person p = new Person();
p.setName("小明");
p.setAge(20);
p.setZy(new String[]{"Java","C++"}); Gson gson = new Gson();
System.out.println(gson.toJson(p));
} public static void JavaBean2(){
Person p = new Person();
p.setName("小明");
p.setAge(20);
p.setZy(new String[]{"Java","C++"});
p.setNosee("这个属性看不到"); GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.setFieldNamingStrategy(new FieldNamingStrategy() { @Override
public String translateName(Field f) {
if(f.getName().equals("name")){
return "Name";
}
return f.getName();
}
});
Gson gson = gb.create();
System.out.println(gson.toJson(p));
} public static void JsonObj(){
JsonObject object = new JsonObject();
object.addProperty("cat", "it"); JsonArray array = new JsonArray(); JsonObject obj = new JsonObject();
obj.addProperty("id", 1);
obj.addProperty("name", "java");
array.add(obj);
JsonObject obj2 = new JsonObject();
obj2.addProperty("id", 1);
obj2.addProperty("name", "java");
array.add(obj2); object.add("language", array);
object.addProperty("pop", true); System.out.println(object.toString());
} }
JavaSE18章_JSON解析详解的更多相关文章
- 第3章 TCP协议详解
第3章 TCP协议详解 3.1 TCP服务的特点 传输协议主要有两个:TCP协议和UDP协议,TCP协议相对于UDP协议的特点是 面向连接使用TCP协议通信的双方必须先建立连接,完成数据交换后,通信双 ...
- Cobalt Strike系列教程第二章:Beacon详解
上周更新了Cobalt Strike系列教程第一章:简介与安装,文章发布后,深受大家的喜爱,遂将该系列教程的其他章节与大家分享,提升更多实用技能! 第二章:Beacon详解 一.Beacon命令 大家 ...
- “全栈2019”Java多线程第十九章:死锁详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第十九章:RuntimeException详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java异常第十七章:Error详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java异常第十六章:Throwable详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java第一百零三章:匿名内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十九章:数组详解(中篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- Spring源码分析——BeanFactory体系之抽象类、类分析(二)
上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之 ...
- 基于Calabash-andriod的UI自动化测试(1)-环境和原理
有时候,一些覆盖happy path的UI自动化还是很有用的.它的一些作用如下: 1.可以迅速实现端到端的功能回归,能够覆盖接口测试覆盖不到的一些地方,如GUI层和接口层的交互产生的问题. 2.非码农 ...
- 配置Windows下的PHP开发环境
一.配置 Apache 开发环境: 二.配置 PHP 开发环境 配置 Apache 开发环境 0. 下载 Apache.由于官方只提供了源码包,我们要么自己编译要么使用别人提供的已经编译好的二进制包. ...
- Local gulp not found in.. on windows
当出现报错时,请按如下方式安装 gulp 以下使用国内的淘宝镜像安装: $ # Step 1 $ cnpm install -g gulp $ # Step 2 $ cnpm install --sa ...
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,
转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股 ...
- Asp.Net 自定义储存Session方式
介绍 由于针对于自定义Session存储方式比较少,所以整理了使用自定义Session的方式.用于构建自定义会话存储提供程序代码,而不是使用默认的 SessionStore 介绍 背景 本文使用的是m ...
- 高级数组-ArrayList
可以放入任意类型的数据 ArrayList alist=new ArrayList(); alist.Add(440;//装箱,讲int类型的值转换为引用类型 int i1=(int)alist[0] ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Resharper的使用
一:Reshaper是什么 即便是那些整天攻击 .NET 和 C# 的人,也常常不得不承认 Visual Studio 确实是个够强大的 IDE,除非他认为更少的 IDE 功能和命令行调试才是更强大的 ...
- C#内存管理与垃圾回收
垃圾回收还得从根说起,就像生儿育女一样. 根:根是一个位置,存放一个指针,该指针指向托管堆中的一个对象,或是一个空指针不指向任何对象,即为null.根存在线程栈或托管堆中,大部分的跟都在线程栈上,因为 ...