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

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

JSON解析基于两种结构:

1、键值对类型

          {
“name”:”Alice”,
“age”:
}

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

  {
“students”:
[
{“name”:”Alice”,“age”:},
{“name”:”Ben”,”age”:}
]
}

JSON解析依赖于外部jar包。

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

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

二、JSON解析字符串

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

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

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

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

 package demo;

 import org.json.JSONException;
import org.json.JSONObject; public class Demo01 {
public static void main(String[] args) throws JSONException {
String json = "{name:'Alice',age:19,sex:'gril'}";
//将{}里面的整体看作一个对象
JSONObject obj = new JSONObject(json);
//根据键名(:前面的)获得值(:后面的)
String name = obj.getString("name");
int age = obj.getInt("age");
String sex = obj.getString("sex"); System.out.println("name:"+name+",age:"+age+",sex:"+sex);
}
}

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

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

 import org.json.JSONException;
import org.json.JSONObject; public class Demo01 { public static void main(String[] args) throws JSONException {
String json = "{student:{name:'Lucy',age:19,sex:'gril'}}";
JSONObject obj = new JSONObject(json);
//注意点
JSONObject stu =obj.getJSONObject("student");
String name = stu.getString("name");
int age = stu.getInt("age");
String sex = stu.getString("sex"); System.out.println("name:"+name+",age:"+age+",sex:"+sex);
}
}

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

 String json = "{students:[{address:'山东',age:10,name:'小明'},{address:'河南',age:15,name:'小李'}]}";
 package json;

 import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class Demo03 {
public static void main(String[] args) throws JSONException {
String json = "{students:[{address:'山东',age:10,name:'小明'},{address:'河南',age:15,name:'小李'}]}";
JSONObject obj = new JSONObject(json);
JSONArray stu = obj.getJSONArray("students");
for(int i=;i<stu.length();i++)
{
JSONObject s = stu.getJSONObject(i);
String name = s.getString("name");
int age = s.getInt("age");
String address = s.getString("address"); System.out.println("第"+i+"个对象"+"name:"+name+",age:"+age+",address:"+address); }
}
} 第0个对象name:小明,age:,address:山东
第1个对象name:小李,age:,address:河南

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

         String json = "{object:{persons:[{name:'小明',image:'帅'},{name:'小李',image:'高'},{name:'小王',image:'富'}]}}";
 package json;

 import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class Demo04 {
public static void main(String[] args) throws JSONException {
String json = "{object:{persons:[{name:'小明',image:'帅'},{name:'小李',image:'高'},{name:'小王',image:'富'}]}}";
JSONObject obj = new JSONObject(json);
JSONObject object = obj.getJSONObject("object");
// JSONObject person = object.getJSONObject("persons");
JSONArray p = object.getJSONArray("persons");
for(int i=;i<p.length();i++)
{
JSONObject person = p.getJSONObject(i);
String name = person.getString("name");
String image = person.getString("image");
System.out.println("第"+(i+)+"个对象的name:"+name+",image:"+image);
} }
} 第1个对象的name:小明,image:帅
第2个对象的name:小李,image:高
第3个对象的name:小王,image:富

5、

         String json = "[{school:'清华',good:'false',class:{name:'物理系',count:100}},{school:'北大',good:'true',class:{name:'化学系',count:45}}]";
 package json;

 import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class Demo05 {
public static void main(String[] args) throws JSONException {
String json = "[{school:'清华',good:'false',class:{name:'物理系',count:100}},{school:'北大',good:'true',class:{name:'化学系',count:45}}]";
JSONArray arr = new JSONArray(json);
for(int i=;i<arr.length();i++)
{
JSONObject ss = arr.getJSONObject(i);
String school = ss.getString("school");
String good = ss.getString("good");
JSONObject clas = ss.getJSONObject("class");
String name = clas.getString("name");
String count = clas.getString("count");
System.out.println("school:"+school+",good:"+good+",className:"+name+",classCount:"+count);
}
}
} school:清华,good:false,className:物理系,classCount:
school:北大,good:true,className:化学系,classCount:

6、

         String json ="{status:2,result:[{name:'小明',id:1}, {name:'小红',id:5},{name:'小王',id:7}]} " ;
 package json;

 import javax.naming.spi.DirStateFactory.Result;

 import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class Demo06 {
public static void main(String[] args) throws JSONException {
String json ="{status:2,result:[{name:'小明',id:1}, {name:'小红',id:5},{name:'小王',id:7}]} " ;
JSONObject obj = new JSONObject(json);
String status = obj.getString("status");
JSONArray result = obj.getJSONArray("result");
for(int i=;i<result.length();i++)
{
JSONObject com = result.getJSONObject(i);
String name = com.getString("name");
String id = com.getString("id");
System.out.println("name:"+name+",id:"+id); } }
} name:小明,id:
name:小红,id:
name:小王,id:

三、解析网络中的数据

步骤:

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

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

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

 import java.io.IOException;
import java.util.List; import org.json.JSONException; public class Test { public static void main(String[] args) throws IOException, JSONException {
String path = "http://..."; //数据源 //得到json字符串
String jsonString = HttpUtil.getJsonString(path);
//把json字符串数据解析成集合
List<T> list = HttpUtil.jsonParser(jsonString);
//遍历集合
for(T t:list)
{
System.out.println(t);
} } }

主类

 import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class HttpUtil { //得到服务器端的json字符串
public static String getJsonString(String path) throws IOException
{
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET");
conn.setConnectTimeout();
conn.setDoInput(true);
InputStream in = null;
if(conn.getResponseCode()==)
{
in = conn.getInputStream();
return changeToString(in);
}
return null;
} private static String changeToString(InputStream in) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] arr = new byte[];
int len = ;
while((len = in.read(arr))!=-)
{
//写入内存流
bos.write(arr,,len);
}
//转换成字符串形式返回
return new String(bos.toByteArray(),"utf-8");
} //解析json字符串,
public static List<T> jsonParser(String jsonString) throws JSONException
{
List<T> list = new ArrayList<T>();
JSONObject obj = new JSONObject(jsonString);
//依据实际情况进行JSON解析
return list; //多个人的信息 } }

解析类

Java数据解析---JSON的更多相关文章

  1. JAVA简便解析json文件

    JAVA简便解析json文件 首先放上我要解析的json文件: { "resultcode":"200", "reason":"S ...

  2. Java数据解析之JSON

    文章大纲 一.JSON介绍二.常见框架介绍与实战三.Studio中GsonFormat插件使用四.项目源码下载(含参考资料)五.参考文档   一.JSON介绍 1. 简介   JSON 的全称是 Ja ...

  3. java 中解析json步骤

    一.   JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. Json建构于两种结构:     1.“名称/值”对的集合(A collection ...

  4. 毕设三: spark与phoenix集成插入数据/解析json数组

    需求:将前些日子采集的评论存储到hbase中 思路: 先用fastjson解析评论,然后构造rdd,最后使用spark与phoenix交互,把数据存储到hbase中 部分数据: [ { "r ...

  5. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  6. IOS数据解析JSON

    //非原创 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSO ...

  7. Android数据解析-JSON解析

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  8. java 封装解析 Json数据。

    import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; im ...

  9. Java后台 解析JSON的几个方法

    1.对象转JSON对象. public static void main(String[] args) { Domain demo = new Domain( "在线JSON校验格式化工具 ...

随机推荐

  1. Java学习笔记29(集合框架三:泛型)

    泛型的概念: 简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题 上一篇有一段这样的代码: 没有定义集合类型.迭代器类型 package demo; imp ...

  2. Tomcat简介

    Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 如果你学过html,css,你会知道你写的页面只能自己访问,别人不能远程访 ...

  3. 【BJOI2019】光线 模拟

    题目大意:有一束光线要依次穿过$n$块玻璃. 第i块玻璃的透射率为$a_i$,反射率为$b_i$. 问你有多少光能最终穿过所有玻璃. 数据范围:$n≤5\times 10^5$,答案对$9982443 ...

  4. 【xsy2304】哈 最短路

    题目大意:有一个$n$个点,$m$条有向边的图,有$q$组询问. 每次询问:从$a$到$b$,经过不超过$c$条边,且依次经过的边边权递增,问最短路为多少,无解输出-1. 数据范围:$n≤150$,$ ...

  5. [EXP]Jenkins 2.150.2 - Remote Command Execution (Metasploit)

    ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://gith ...

  6. Visual Studio For MacOS 踩坑记(二)

    Visual Studio For MacOS安装安卓SDK. 系统默认安装了安卓6.0  API23的SDK.  但是我需要安卓7.0的,API24.  遂安装. SDK可以下载成功,但是用Visu ...

  7. SpringCloud断路器监控面板——Hystrix Dashboard

    一.简介 Hystrix Dashboard是Hystrix的一个组件,Hystrix Dashboard提供一个断路器的监控面板,可以使我们更好的监控服务和集群的状态,仅仅使用Hystrix Das ...

  8. iOS ipa包瘦身,iOS8及以下text段超60MB

    前沿 很早之前写过一篇相关文章,不过博客主机上跑路了之后数据没了,凭着记忆补了下相关资料 ipa安装包瘦身 清理无用图片,图片压缩(PNG换WebP和JPG),处于某种不可抗拒的原因,导致有部分3X图 ...

  9. TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()

    Variable tensorflow中有两个关于variable的op,tf.Variable()与tf.get_variable()下面介绍这两个的区别 使用tf.Variable时,如果检测到命 ...

  10. Nginx实战-后端应用健康检查

    严格来说,nginx是没有针对负载均衡后端节点的健康检查的,但是可以通过proxy_next_upstream来间接实现,但这个还是会把请求转发给故障服务器的,然后再转发给别的服务器,这样就浪费了一次 ...