JSON初体验(一)

在学校的呆了一段时间,马上又要回去工作了,不说了,我现在介绍一下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>
时间: 2025-01-13 17:04:04

JSON初体验(一)的相关文章

JSON初体验(三):FastJson解析

JSON解析之FastJson(阿里巴巴解析开源) 特点: Fastjson是一个Java语言编写的高性能功能完善的JSON库,它采用的 是一种"假定有序快速匹配"的算法,把JSON Parse的性能提升到极致, 是目前Java语言中最快的JSON库. 1.将json格式{}转换为Java对象 API: <T> T parseObject(String json,Class<T> classOfT); 步骤: 1.导入fastjson的jar包 2.JSON调用

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

AngularJS路由系列(3)-- UI-Router初体验

本系列探寻AngularJS的路由机制,在WebStorm下开发. AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Router初体验4.AngularJS路由系列(4)-- UI-Router的$state服务.路由事件.获取路由参数5.AngularJS路由系列(5)-- UI-Router的路由

转:iOS7初体验(3)——图像资源Images Assets

开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文分享一下Images.xcassets的体验~_~ 1. 打开此前使用过的HelloWorld项目,然后单击并打开导航区域中的Images.xcassets,看看都有些什么东东:]: 2. 在图中可以看到中间位置有两个虚线框,感觉应该可以直接拖文件进来.OK,那就先准备一下资源文件,如下图所示: 说明:为方便起见,除Icon7.png之外,其他图标的文件名均沿袭了以往iOS图标的命名规则.

iOS7初体验(3)——图像资源Images Assets

开始之前,首先回顾一下iOS7初体验(1)--第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1. 打开此前使用过的HelloWorld项目,然后单击并打开导航区域中的Images.xcassets,看看都有些什么东东:]: 2. 在图中可以看到中间位置有两个虚线框,感觉应该可以直接拖文件进来.OK,那就先准备一下资源文件,如下图所示: 说明:为方便起见,除Icon7.png之外,其他图标的文件名均沿袭了以往iOS图标的命名规则

SignalR初体验

简介 ASP .NET SignalR[1]  是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相通知消息及调用方法,当然这是实时操作的. 1.环境部署 首先新建一个mvc项目,通过Nuget获取相应SignalR包.使用Nuget的命令模式,直接输入 Install-Package Microsoft.AspNet.SignalR -Version 1.0.1 由于最新版本需要Net Fr

百度EChart3初体验

由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详细.大家可以去看下.大概了解下用法就OK. 百度ECharts 3:http://echarts.baidu.com/index.html 其实还有很多,可以到官网中找. 下面是我进行操作的步奏,大家可以看下,做个参考. ECharts初体验—01... 需要到官网下载最新的版本的js文件(完整版)

ArcGis SOE(server object extensions)之REST Template初体验

一.安装vs和arcgis server for .net(本例是vs2010.as 10),然后打开vs新建一个项目 二.项目创建成功后(本例项目名称是GetArea),打开.cs文件. 三.接口方法说明 private RestResource CreateRestSchema() { RestResource rootRes = new RestResource(soe_name, false, RootResHandler); RestOperation sampleOper = new

【尝新】微信小程序初体验

文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小demo ,样例中的文件说明如下: 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: app.js 是 小程序逻辑 app.json 是 小程序公共设置 app.wxss 否 小程序公共样式表 一个小程序页面由四个文