前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java数据解析---JSON

Java数据解析---JSON

作者头像
听着music睡
发布于 2018-05-18 04:50:12
发布于 2018-05-18 04:50:12
3K00
代码可运行
举报
文章被收录于专栏:Android干货Android干货
运行总次数:0
代码可运行

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

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

JSON解析基于两种结构:

1、键值对类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1          {
2             “name”:”Alice”,
3             “age”:19
4          }    

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、先看一个最简单的字符串数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 String json = "{name:'Alice',age:19,sex:'gril'}";

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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、再看一个对象中含对象的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         String json = "{student:{name:'Lucy',age:19,sex:'gril'}}";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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、再看字符串中含有数组类型的情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 String json = "{students:[{address:'山东',age:10,name:'小明'},{address:'河南',age:15,name:'小李'}]}";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 
260个对象name:小明,age:10,address:山东
271个对象name:小李,age:15,address:河南

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         String json = "{object:{persons:[{name:'小明',image:'帅'},{name:'小李',image:'高'},{name:'小王',image:'富'}]}}";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 
261个对象的name:小明,image:272个对象的name:小李,image:283个对象的name:小王,image:

5、

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         String json = "[{school:'清华',good:'false',class:{name:'物理系',count:100}},{school:'北大',good:'true',class:{name:'化学系',count:45}}]";
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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、

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         String json ="{status:2,result:[{name:'小明',id:1}, {name:'小红',id:5},{name:'小王',id:7}]} " ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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解析,并将数据存入到集合中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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     
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-10-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
23.7K0
【AngularJS】 # AngularJS入门
AngularJS系列(八)——事件
ng-click :点击 ng-click 指令定义了 AngularJS 点击事件。 <div ng-app="myApp"ng-controller="myCtrl"> <buttonng-click="count=count+1">点我!</button> <p>{{count}}</p> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function
逝兮诚
2019/10/30
5250
Angularjs基础(七)
AngularJS表单     AngularJS表单时输入控件的集合 HTML控件     一下HTML input 元素被称为HTML 控件:         input 元素         select元素         button元素         textarea元素 HTML 表单     AngularjS表单上实例       <div ng-app="myApp" ng-controller="formCtrl">          <from nova
用户1197315
2018/01/19
2.2K0
【一起来烧脑】一步学会AngularJS系统
AngularJS是一个JavaScript框架 一个用JavaScript编写的库
达达前端
2019/07/18
5.7K0
【一起来烧脑】一步学会AngularJS系统
AngularJS 事件
ng-hide 指令设置 <p>元素及两个输入域是否可见, 根据 myVar 的值 (true 或 false) 来设置是否可见。
陈不成i
2021/07/23
1.7K0
AngularJS 表单
checkbox 的值为 true 或 false,可以使用 ng-model 指令绑定,它的值可以用于应用中:
陈不成i
2021/07/23
3.2K0
Angularjs基础(六)
AngularJS HTML DOM     AngularJS为HTML DOM 元素的属性提供了绑定应用数据的指令。 ng-disabled指令     ng-disabled指令直接绑定应用数据到HTML的disabled属性。       实例:       <div ng-app="" ng-init="mySwitch=true">         <p>           <button ng-disableled="mySwitch">点我!</button
用户1197315
2018/01/19
3.1K0
7-进军 angular1.x 表单和事件、模块
通常 AngularJS 应用程序将模块和控制器包含在 JavaScript 文件中。
西南_张家辉
2021/02/02
2.4K0
AngularJS系列(十)——表单的重置和验证
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
1.6K0
Angularjs基础(三)
    AngularJS ng-model 指令     ng-model 指令用于绑定应用程序数据到HTML 控制器(input,select,textarea)的值 ng-model指令     ng-model指令可以将输入域的值与AngularJS 创建的变量绑定。       实例:         <div ng-app="myApp" ng-controller="myCtrl">             名字:<input ng-model="name">  
用户1197315
2018/01/19
3.2K0
AngularJS Bootstrap
AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架。
陈不成i
2021/07/26
4.8K0
Angularjs基础(八)
AngularJS Bootstrap     AngularJS 的首选样式表是 Twitter Bootstrap ,Twitter Bootstrap 是目前最受欢迎的前端框架 Bootstrap     你可以在你的 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码:     <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/boo
用户1197315
2018/01/19
3.1K0
Angularjs基础(九)
AngularJS 应用 应用程序讲解     实例:         <html ng-app="myNoteApp">           <head>             <meat charset="utf-8">             <script src="http://apps.bdimg.com/libs/angular.js/1.4.6angular.min.js"></script>           </head>           <body>
用户1197315
2018/01/22
1.2K0
【AngularJS】—— 1 初识AngularJs
怀着激动与忐忑的心情,开始了学习AngularJS的旅程,很久之前就听说了这个前端框架,但是由于自己一直没有从事相关的工作,因此也没有进行学习。这次正好学习AngularJS,直接复习一下前端的知识。目前这里还是弱点,慢慢深入的学习。   AngularJS是Google的优秀的前端框架,目前已经应用于多个产品。   通过w3cschool.cc的学习,简单的了解了下它的使用方法,但是对于原理还没有理解。   AngularJs相对于其他的框架来说,有一下的特性:   1 MVVM   2 模块化
用户1154259
2018/01/17
2.9K0
angularjs 表单验证
一、常用的表单验证指令  1. 必填项验证 某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" required />   2. 最小长度 验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}": <input type="text" ng-minlength="5" /> 3. 最大长度 验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength=
柴小智
2018/04/10
6.8K0
angularjs 表单验证
AngularJS 输入验证
我们使用了 ng-show指令, color:red 在邮件的 $dirty 或 $invalid 都为 true 时才显示。
陈不成i
2021/07/23
1.3K0
AngularJS浅谈-博客
AngularJS是啥?(一脸懵逼) 简介: AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款
双愚
2018/05/28
2.5K0
3-进军 angular1.x 模型和作用域 scope
View(视图), 即 HTML。 Model(模型), 当前视图中可用的数据。 Controller(控制器), 即 JavaScript 函数,可以添加或修改属性。 scope 是模型。
西南_张家辉
2021/02/02
1.3K0
AngularJS快速入门
记得第一次听说AngularJS这项很赞的Web的前端技术,那时还是2014年,年中时我们我的一个大牛兄弟当时去面试时,被问到了是否熟悉该技术,当时他了解和使用的技术比较多。我们询问他面试情况时,他给俺这个菜菜科普了该技术,印象比较深的是该技术支持前端MVC架构,可以完成大部分原有的后台工作,当时就觉得很神奇,但由于自身技术基础比较薄弱,没有太多时间和积累去学习新的技术,因而搁置了。在2016新年初始,正好有一些富余时间,正好学习下这个被称为就是“”两个大括号“”的前端框架(当前已经非常成熟,国内大部分公司
用户1216676
2018/01/24
2.6K0
AngularJS快速入门
【AngularJS】—— 5 表单
这部分,我们写一个表单程序,使用angularjs的检测并完成表单属性的获取与拷贝。   在AngularJS中,也支持html5中多种控件的自动检测,如:text、number、url、email、radio、checkbox等等。   可以通过anuglar.copy()自动拷贝form表单的数据。   代码参考如下: <!doctype html> <html ng-app> <head> <meta http-equiv="Content-Type" content=
用户1154259
2018/01/17
8610
【AngularJS】—— 5 表单
相关推荐
【AngularJS】 # AngularJS入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档