Java数据解析---JSON

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一、Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1、键值对类型 1 { 2 “name”:”Alice”, 3...

一、Java数据解析分为:XML解析和JSON解析

XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便

JSON解析基于两种结构:

1、键值对类型

1          {
2             “name”:”Alice”,
3             “age”:19
4          }    

2、数组类型(有序列表)

1  {
2         “students”:
3         [
4             {“name”:”Alice”,“age”:19},
5             {“name”:”Ben”,”age”:11}
6         ]
7      }

JSON解析依赖于外部jar包。

首先、服务器端项目要导入json的jar包和json所依赖的jar包至builtPath路径下(这些可以到JSON-lib官网下载:http://json-lib.sourceforge.net/

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

二、JSON解析字符串

1、先看一个最简单的字符串数据

1 String json = "{name:'Alice',age:19,sex:'gril'}";

例如,对于这样一个字符串数据进行JSON解析,要解析的数据即是冒号(:)后面的数据 Alice 19 gril

把{}包含的所有看作是一个对象,把[]包含的看作为一个数组,分清JSONObject 和JSONArray 多练习 就掌握了

 1 package demo;
 2 
 3 import org.json.JSONException;
 4 import org.json.JSONObject;
 5 
 6 public class Demo01 {
 7     public static void main(String[] args) throws JSONException {
 8         String json = "{name:'Alice',age:19,sex:'gril'}";
 9         //将{}里面的整体看作一个对象
10         JSONObject obj = new JSONObject(json);
11         //根据键名(:前面的)获得值(:后面的)
12         String name = obj.getString("name");
13         int age = obj.getInt("age");
14         String sex = obj.getString("sex");
15         
16         System.out.println("name:"+name+",age:"+age+",sex:"+sex);
17     }
18 }

2、再看一个对象中含对象的

1         String json = "{student:{name:'Lucy',age:19,sex:'gril'}}";

 

 1 package demo;
 2 
 3 import org.json.JSONException;
 4 import org.json.JSONObject;
 5 
 6 public class Demo01 {
 7 
 8     public static void main(String[] args) throws JSONException {
 9         String json = "{student:{name:'Lucy',age:19,sex:'gril'}}";
10         JSONObject obj = new JSONObject(json);
11         //注意点
12         JSONObject stu =obj.getJSONObject("student");
13         String name = stu.getString("name");
14         int age = stu.getInt("age");
15         String sex = stu.getString("sex");
16         
17         System.out.println("name:"+name+",age:"+age+",sex:"+sex);
18     }
19 }

3、再看字符串中含有数组类型的情况

 

1 String json = "{students:[{address:'山东',age:10,name:'小明'},{address:'河南',age:15,name:'小李'}]}";
 1 package json;
 2 
 3 import org.json.JSONArray;
 4 import org.json.JSONException;
 5 import org.json.JSONObject;
 6 
 7 public class Demo03 {
 8     public static void main(String[] args) throws JSONException {
 9         String json = "{students:[{address:'山东',age:10,name:'小明'},{address:'河南',age:15,name:'小李'}]}";
10         JSONObject obj = new JSONObject(json);
11         JSONArray stu = obj.getJSONArray("students");
12         for(int i=0;i<stu.length();i++)
13         {
14             JSONObject s = stu.getJSONObject(i);
15             String name = s.getString("name");
16             int age = s.getInt("age");
17             String address = s.getString("address");
18             
19             System.out.println(""+i+"个对象"+"name:"+name+",age:"+age+",address:"+address);
20             
21         }
22     }
23 }
24 
25 
26 第0个对象name:小明,age:10,address:山东
27 第1个对象name:小李,age:15,address:河南

4、看几个发杂点的字符串JSON解析

1         String json = "{object:{persons:[{name:'小明',image:'帅'},{name:'小李',image:'高'},{name:'小王',image:'富'}]}}";
 1 package json;
 2 
 3 import org.json.JSONArray;
 4 import org.json.JSONException;
 5 import org.json.JSONObject;
 6 
 7 public class Demo04 {
 8     public static void main(String[] args) throws JSONException {
 9         String json = "{object:{persons:[{name:'小明',image:'帅'},{name:'小李',image:'高'},{name:'小王',image:'富'}]}}";
10         JSONObject obj = new JSONObject(json);
11         JSONObject object = obj.getJSONObject("object");
12 //        JSONObject person = object.getJSONObject("persons");
13         JSONArray p = object.getJSONArray("persons");
14         for(int i=0;i<p.length();i++)
15         {
16             JSONObject person = p.getJSONObject(i);
17             String name = person.getString("name");
18             String image = person.getString("image");
19             System.out.println(""+(i+1)+"个对象的name:"+name+",image:"+image);
20         }
21     
22     }
23 }
24 
25 
26 第1个对象的name:小明,image:帅
27 第2个对象的name:小李,image:高
28 第3个对象的name:小王,image:富

5、

1         String json = "[{school:'清华',good:'false',class:{name:'物理系',count:100}},{school:'北大',good:'true',class:{name:'化学系',count:45}}]";
 1 package json;
 2 
 3 
 4 
 5 import org.json.JSONArray;
 6 import org.json.JSONException;
 7 import org.json.JSONObject;
 8 
 9 public class Demo05 {
10     public static void main(String[] args) throws JSONException {
11         String json = "[{school:'清华',good:'false',class:{name:'物理系',count:100}},{school:'北大',good:'true',class:{name:'化学系',count:45}}]";
12         JSONArray arr = new JSONArray(json);
13         for(int i=0;i<arr.length();i++)
14         {
15             JSONObject ss = arr.getJSONObject(i);
16             String school = ss.getString("school");
17             String good = ss.getString("good");
18             JSONObject clas = ss.getJSONObject("class");
19             String name = clas.getString("name");
20             String count = clas.getString("count");
21             System.out.println("school:"+school+",good:"+good+",className:"+name+",classCount:"+count);
22         }
23     }
24 }
25 
26 
27 
28 school:清华,good:false,className:物理系,classCount:100
29 school:北大,good:true,className:化学系,classCount:45

6、

1         String json ="{status:2,result:[{name:'小明',id:1}, {name:'小红',id:5},{name:'小王',id:7}]} " ;
 1 package json;
 2 
 3 import javax.naming.spi.DirStateFactory.Result;
 4 
 5 import org.json.JSONArray;
 6 import org.json.JSONException;
 7 import org.json.JSONObject;
 8 
 9 public class Demo06 {
10     public static void main(String[] args) throws JSONException {
11         String json ="{status:2,result:[{name:'小明',id:1}, {name:'小红',id:5},{name:'小王',id:7}]} " ;
12         JSONObject obj = new JSONObject(json);
13         String status = obj.getString("status");
14         JSONArray result = obj.getJSONArray("result");
15         for(int i=0;i<result.length();i++)
16         {
17             JSONObject com = result.getJSONObject(i);
18             String name = com.getString("name");
19             String id = com.getString("id");
20             System.out.println("name:"+name+",id:"+id);
21             
22         }
23         
24         
25         
26     }
27 }
28 
29 
30 
31 name:小明,id:1
32 name:小红,id:5
33 name:小王,id:7

 三、解析网络中的数据

步骤:

1、得到指定网络地址上的数据的输入流,并存储到内存流

2、将内存流中的数据转换成字符串

3、对字符串进行JSON解析,并将数据存入到集合中

 1 import java.io.IOException;
 2 import java.util.List;
 3 
 4 import org.json.JSONException;
 5 
 6 public class Test {
 7 
 8     public static void main(String[] args) throws IOException, JSONException {
 9         String path = "http://..."; //数据源
10         
11         //得到json字符串
12         String jsonString = HttpUtil.getJsonString(path);
13         //把json字符串数据解析成集合
14         List<T> list = HttpUtil.jsonParser(jsonString);
15         //遍历集合
16         for(T t:list)
17         {
18             System.out.println(t);
19         }
20 
21     }
22 
23 }
主类
 1 import java.io.ByteArrayOutputStream;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.net.HttpURLConnection;
 5 import java.net.MalformedURLException;
 6 import java.net.URL;
 7 import java.util.ArrayList;
 8 import java.util.List;
 9 
10 import org.json.JSONArray;
11 import org.json.JSONException;
12 import org.json.JSONObject;
13 
14 public class HttpUtil {
15     
16     //得到服务器端的json字符串
17     public static String getJsonString(String path) throws IOException
18     {
19         URL url = new URL(path);
20         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
21         
22         conn.setRequestMethod("GET");
23         conn.setConnectTimeout(5000);
24         conn.setDoInput(true);
25         InputStream in = null;
26         if(conn.getResponseCode()==200)
27         {
28             in = conn.getInputStream();
29             return changeToString(in);
30         }
31         return null;
32     }
33 
34     private static String changeToString(InputStream in) throws IOException {
35         ByteArrayOutputStream bos = new ByteArrayOutputStream();
36         byte[] arr = new byte[1024];
37         int len = 0;
38         while((len = in.read(arr))!=-1)
39         {
40                         //写入内存流
41             bos.write(arr,0,len);
42         }
43                 //转换成字符串形式返回
44         return new String(bos.toByteArray(),"utf-8");
45     }
46     
47     //解析json字符串,
48     public static List<T> jsonParser(String jsonString) throws JSONException
49     {
50         List<T> list = new ArrayList<T>();
51         JSONObject obj = new JSONObject(jsonString);
52         //依据实际情况进行JSON解析
53         return list; //多个人的信息
54         
55     }
56  
57 }
58 
59 
60 
61 
62     
解析类

 

相关文章
|
5天前
|
存储 Java 编译器
Java内存模型(JMM)深度解析####
本文深入探讨了Java内存模型(JMM)的工作原理,旨在帮助开发者理解多线程环境下并发编程的挑战与解决方案。通过剖析JVM如何管理线程间的数据可见性、原子性和有序性问题,本文将揭示synchronized关键字背后的机制,并介绍volatile关键字和final关键字在保证变量同步与不可变性方面的作用。同时,文章还将讨论现代Java并发工具类如java.util.concurrent包中的核心组件,以及它们如何简化高效并发程序的设计。无论你是初学者还是有经验的开发者,本文都将为你提供宝贵的见解,助你在Java并发编程领域更进一步。 ####
|
3天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
1天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
2天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
13 2
|
2天前
|
设计模式 安全 Java
Java编程中的单例模式深入解析
【10月更文挑战第31天】在编程世界中,设计模式就像是建筑中的蓝图,它们定义了解决常见问题的最佳实践。本文将通过浅显易懂的语言带你深入了解Java中广泛应用的单例模式,并展示如何实现它。
|
5天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
10天前
|
Java 程序员 开发者
Java中的异常处理机制深度解析####
本文将深入浅出地探讨Java编程语言中异常处理的核心概念与实践策略,旨在帮助开发者更好地理解如何构建健壮的应用程序。通过剖析异常体系结构、掌握有效的异常捕获与处理技巧,以及学习最佳实践,读者能够提升代码质量,减少运行时错误,从而增强软件的稳定性和用户体验。 ####
|
9天前
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
18 3
|
7天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
22 1
|
8天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
91 1

推荐镜像

更多