JSON初体验(一):JsonObject解析
在学校的呆了一段时间,马上又要回去工作了,不说了,我现在介绍一下json相关的内容
1.JSON数据格式(总的来说,json就是一个字符串)
	  1.整体结构
		    String json1 = "{"id":12,"name":"Tom"}";
		    String json2 = "[{"id":12,"name":"Tom"},{"id":12,"name":"Tom"}]";
  2.json对象
		    a.json对象的结构:{key1:value1,key2:value2,key3:value3}
b.key的数据类型:字符串
    c.value的数据类型:
			      1.数值
			      2.字符串
			      3.null
			      4.json数组[]
			      5.json对象{}
    d.例子
			      正确的:{“name”:"TOM","age":12}
			      错误的:{"aa":"a",3}
	  3.json数组
		    a.json数组的结构:[value1,value2,value3]
    b.value的数据类型:
			      1.数值
			      2.字符串
			      3.null
			      4.json数组[]
			      5.json对象{}
    c.例子
			      正确的:[1,"ab",[],{"n":132,“b”:"abc"}]
			      错误的:[1,"a":3]
2.JSON解析方向
	  1.将java对象(包含集合)转换为json格式字符串(在服务器端应用)
2.将json格式字符串转换为java对象,包含集合(在客户端应用)
  3.json和java之间的转换关系
		    a.json对应java对象
		    b.json数组与java对象构成的list相对应
3.JSON解析技术
	  1.Android原生技术:
		    特点:编程相对麻烦
		    数据之间转换(demo):
			      a.将json格式的字符串{}转换为java对象
        API:
					          JSONObject(String json):将json字符串解析为json对象
					          Xxx getXxx(String name):根据name,在json对象中得到对应的Value
					          Xxx optXxx(String name):根据name,在json对象中得到对应的value
					        注意:
						          optXxx方法会在对应的key中的值不存在的时候返回一个空字符串或者返回
						          你指定的默认值,但是getString方法会出现空指针异常的错误
String json = "{\n" +
	"    \"id\":2,\n" +
     "    \"name\":\"Tom\",\n" +
     "    \"price\":12.3,\n" +
	"    \"imagePath\":\"http://www.baidu.com\"\n" +
	"}"
JSONObject jsonObject = new JSONObject(json);
int id = jsonObject.optInt("id");
String name = jsonObject.optString("name");
double price = jsonObject.optDouble("price");
String imagePath = jsonObject.optString("imagePath");
b.将json格式的字符串[]转换为java对象的List
        API:
					          JSONArray(String json):将json字符串解析为json数组
					          int length():得到json数组中元素的个数
					          Xxx getXxx(int index):根据下标得到json数组中对应的元素数据
					          Xxx optXxx(int index):根据下标得到json数组中对应的元素数据
					        注意:
						          optXxx方法会在对应的key中的值不存在的时候返回一个空字符串或者返回
						          你指定的默认值,但是getString方法会出现空指针异常的错误
String json = "[\n" +
" {\n" +
" \"id\":1,\n" +
" \"imagePath\":\"www.baidu.com\",\n" +
" \"name\":\"Tom1\",\n" +
" \"price\":12.3\n" +
" },\n" +
" {\n" +
" \"id\":1,\n" +
" \"imagePath\":\"www.douban.com\",\n" +
" \"name\":\"Tom2\",\n" +
" \"price\":12.5\n" +
" }\n" +
"]";
List<First> list = new ArrayList<First>();
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length() ; i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if(jsonObject != null){
int id = jsonObject.optInt("id");
String imagePath = jsonObject.optString("imagePath");
String name = jsonObject.optString("name");
Double price = jsonObject.optDouble("price");
First first = new First(id, name, price, imagePath);
list.add(first);
}
}
for (int i = 0; i <list.size() ; i++) {
System.out.println(list.get(i).toString());
}
c.复杂json数据解析
String json = "{\n" +
     "    \"data\":{\n" +
	"        \"count\":5,\n" +
	"        \"items\":[\n" +
	"            {\n" +
	"                \"id\":45,\n" +
	"                \"title\":\"坚果\"\n" +
	"            },\n" +
	"            {\n" +
     "                \"id\":132,\n" +
	"                \"title\":\"炒货\"\n" +
     "            },\n" +
	"            {\n" +
	"                \"id\":166,\n" +
	"                \"title\":\"蜜饯\"\n" +
	"            },\n" +
	"            {\n" +
	"                \"id\":195,\n" +
	"                \"title\":\"果脯\"\n" +
	"            },\n" +
	"            {\n" +
     "                \"id\":196,\n" +
	"                \"title\":\"礼盒\"\n" +
	"            }\n" +
	"        ]\n" +
	"    },\n" +
	"    \"rs_code\":\"1000\",\n" +
	"    \"rs_msq\":\"success\"\n" +
	"}";
List<Second> list = new ArrayList<Second>();
JSONObject jsonObject = new JSONObject(json);
JSONObject data = jsonObject.optJSONObject("data");
String rs_code = jsonObject.optString("rs_code");
String rs_msq = jsonObject.optString("rs_msq");
int count = data.optInt("count");
JSONArray items = data.optJSONArray("items");
for (int i = 0; i < items.length(); i++) {
    JSONObject jj = items.getJSONObject(i);
    int id = jj.optInt("id");
    String title = jj.optString("title");
    Second second = new Second(id,title);
    list.add(second);
}
d.特殊json数据解析
FilmInfo类
public class FilmInfo {
  private int code;
   private List<FilmBean> list;
   public int getCode() {
     return code;
   }
   public void setCode(int code) {
     this.code = code;
   }
   public List<FilmBean> getList() {
     return list;
   }
   public void setList(List<FilmBean> list) {
     this.list = list;
   }
   public static class FilmBean{
     private String  aid;
     private String author;
     private int coins;
     private String copyright;
     private String create;
     public String getAid() {
       return aid;
     }
     public void setAid(String aid) {
       this.aid = aid;
     }
     public String getAuthor() {
       return author;
      }
      public void setAuthor(String author) {
        this.author = author;
      }
      public int getCoins() {
        return coins;
      }
      public void setCoins(int coins) {
        this.coins = coins;
      }
      public String getCopyright() {
        return copyright;
      }
      public void setCopyright(String copyright) {
        this.copyright = copyright;
      }
      public String getCreate() {
        return create;
      }
      public void setCreate(String create) {
        this.create = create;
      }
      @Override
      public String toString() {
        return "FilmBean{" +
                 "aid='" + aid + '\'' +
                 ", author='" + author + '\'' +
                 ", coins=" + coins +
                 ", copyright='" + copyright + '\'' +
                 ", create='" + create + '\'' +
                 '}';
        }
}
      @Override
      public String toString() {
        return "FilmInfo{" +
                 "code=" + code +
                 ", list=" + list +
                 '}';
          }
}
此时对json进行分析
  String json = "{\n" +
        "    \"code\":0,\n" +
        "    \"list\":{\n" +
	"        \"0\":{\n" +
        "            \"aid\":\"6008965\",\n" +
	"            \"author\":\"哔哩哔哩番剧\",\n" +
	"            \"coins\":170,\n" +
	"            \"copyright\":\"Copy\",\n" +
	"            \"create\":\"2016-08-25 21:34\"\n" +
	"        },\n" +
	"        \"1\":{\n" +
	"            \"aid\":\"6008938\",\n" +
	"            \"author\":\"哔哩哔哩番剧\",\n" +
	"            \"coins\":404,\n" +r
	"            \"copyright\":\"Copy\",\n" +
	"            \"create\":\"2016-08-25 21:33\"\n" +
	"        }\n" +
        "    }\n" +
	"}";
FilmInfo filmInfo = new FilmInfo();
JSONObject jsonObject = new JSONObject(json);
int code = jsonObject.optInt("code");
filmInfo.setCode(code);
List<FilmInfo.FilmBean> filmList = new ArrayList<FilmInfo.FilmBean>();
filmInfo.setList(filmList);
JSONObject list = jsonObject.optJSONObject("list");
for (int i = 0; i <list.length() ; i++) {
	JSONObject jsonObject1 = list.optJSONObject(i + "");
	String aid = jsonObject1.optString("aid");
	String author = jsonObject1.optString("author");
	int coins = jsonObject1.optInt("coins");
	String copyright = jsonObject1.optString("copyright");
	String create = jsonObject1.optString("create");
	FilmInfo.FilmBean filmBean = new FilmInfo.FilmBean();
	filmBean.setAid(aid);
	filmBean.setAuthor(author);
	filmBean.setCoins(coins);
	filmBean.setCopyright(copyright);
	filmBean.setCreate(create);
	filmList.add(filmBean);
}
System.out.println(filmInfo);
最后在补充一点,这里面的org.json.jsonObject的maven为
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
JSON初体验(一):JsonObject解析的更多相关文章
- JSON初体验(三):FastJson解析
		
JSON解析之FastJson(阿里巴巴解析开源) 特点: Fastjson是一个Java语言编写的高性能功能完善的JSON库,它采用的 是一种"假定有序快速匹配"的算法,把JSO ...
 - JSON初体验(二):Gson解析
		
今天,我们来介绍一下Gson的jar包的用法. JSON解析之Gson 特点:编码简介,谷歌官方推荐 数据之间的转换: 1.将json格式的字符串{}转换成为java对象 API: <T> ...
 - SpringBoot初体验及原理解析
		
一.前言  上篇文章,我们聊到了SpringBoot得以实现的幕后推手,这次我们来用SpringBoot开始HelloWorld之旅.SpringBoot是Spring框架对“约定大于配置(Conv ...
 - Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
		
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
 - Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验
		
(一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...
 - $Java-json系列(二):用JSONObject解析和处理json数据
		
本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法. (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre ( ...
 - 用JSONObject解析和处理json数据
		
(一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...
 - JSONObject解析json数据
		
首先先看一下我们要解析的json数据是什么样子的: 代码: String url="http://113.57.190.228:8001/Web/Report/GetBigMSKReport ...
 - 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
 
随机推荐
- 给Sublime text 3增加选中当前单词快捷键
			
1.录制一份macro caret on a word –> ctrl+left –> ctrl+shift+right 2.将录制好的macro保存为select_current_wor ...
 - python入门4 python查看数据类型及类型转换
			
查看数据类型:type() 类型转换:int(),float(),char(),ord(),str(),bool() #coding:utf-8 #/usr/bin/python "&quo ...
 - Android(java)学习笔记45:深入分析Java ClassLoader原理
			
1. 前言: Android中的动态加载机制能更好的优化我们的应用,同时实现动态的更新,这就便于我们管理我们的应用,通过插件化来减轻我们的内存以及CPU消耗,在不发布新版本的情况下能更新某些模块. 当 ...
 - swift语言的特点(相对于oc)
			
1.泛型.泛型约束与扩展: 2.函数式编程: 3.值类型.引用类型: 4.枚举.关联值.元组等其他 上述为swift最大的特点 Another safety feature is that by de ...
 - 从零开始Vue项目实战(一)-准备篇
			
从前参与过一个react项目的代码编写,大神搭建的框架,我主要负责业务逻辑代码编写,现在回想起来似乎又什么都不会,现在为了巩固前端知识,决定用Vue来做这个项目的移动端网站,我本人Vue是从零开始的, ...
 - python nmap模块 端口探测
			
今天添加端口探测功能,主要实现方式是通过nmap模块调用,扫描1-65535端口.上一篇中已经将UP的PC机全部获取到,这里直接从已知在线的PC中进行端口扫描就可以了,会节省很多时间. 代码如下,还是 ...
 - 2018.11.24 struts2中的OGNL表达式及两者的结合
			
OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...
 - LocalDB的奇怪问题
			
属性 MasterDBPath 不可用于 信息“Microsoft.SqlServer.Management.Smo.Information”.该对象可能没有此属性,也可能是访问权限不足而无法检索. ...
 - CSharp调用C++编写的DLL的方法
			
自己比较懒,有的时候想写点东西,但由于文笔不行.技术不行也就没有怎么写.经常是用到什么.学习什么的时候,简单写点,权当是个学习笔记.上博客的次数也很少,有人给我留言也是没有怎么及时的回复,深感抱歉! ...
 - C#4.0     System.Dynamic
			
System.Dynamic 命名空间提供支持动态语言运行时的类和接口. 代码下载地址:GitHub 本篇主要讲两个类:①ExpandoObject ②DynamicObject (重点) ①E ...