博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Json生成及解析实例
阅读量:5102 次
发布时间:2019-06-13

本文共 3794 字,大约阅读时间需要 12 分钟。

JSON的定义:

 

       一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。

 

JSON Vs XML

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

 

6.JSON的速度要远远快于XML

android2.3提供的json解析类 

android的json解析部分都在包org.json下,主要有以下几个类: 

JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External:   应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之间是以逗号","分隔。Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。

JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:     [value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为,     get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

JSONTokener:json解析类 
JSONException:json中用到的异常 

         下面来个JSON生成及解析的实例:

          

[java] 
 
  1. /** 
  2.  * JSON操作类。 
  3.  * @author E 
  4.  */  
  5. public class JsonUtil {  
  6.       
  7.     /** 
  8.      * 将数组转换为JSON格式的数据。 
  9.      * @param stoneList 数据源 
  10.      * @return JSON格式的数据 
  11.      */  
  12.     public static String changeArrayDateToJson(ArrayList<Stone> stoneList){  
  13.         try {  
  14.             JSONArray array = new JSONArray();  
  15.             JSONObject object = new JSONObject();  
  16.             int length = stoneList.size();  
  17.             for (int i = 0; i < length; i++) {  
  18.                 Stone stone = stoneList.get(i);  
  19.                 String name = stone.getName();  
  20.                 String size = stone.getSize();  
  21.                 JSONObject stoneObject = new JSONObject();  
  22.                 stoneObject.put("name", name);  
  23.                 stoneObject.put("size", size);  
  24.                 array.put(stoneObject);  
  25.             }  
  26.             object.put("stones", array);  
  27.             return object.toString();  
  28.         } catch (JSONException e) {  
  29.             e.printStackTrace();  
  30.         }  
  31.         return null;  
  32.     }  
  33.       
  34.     /** 
  35.      * 将JSON转化为数组并返回。 
  36.      * @param Json 
  37.      * @return ArrayList<Stone> 
  38.      */  
  39.     public static ArrayList<Stone> changeJsonToArray(String Json){  
  40.         ArrayList<Stone> gameList = new ArrayList<Stone>();  
  41.         try {  
  42.             JSONObject jsonObject = new JSONObject(Json);  
  43.             if (!jsonObject.isNull("stones")) {  
  44.                 String aString = jsonObject.getString("stones");  
  45.                 JSONArray aJsonArray = new JSONArray(aString);  
  46.                 int length = aJsonArray.length();  
  47.                 for (int i = 0; i < length; i++) {  
  48.                     JSONObject stoneJson = aJsonArray.getJSONObject(i);  
  49.                     String name = stoneJson.getString("name");  
  50.                     String size = stoneJson.getString("size");  
  51.                     Stone stone = new Stone();  
  52.                     stone.setName(name);  
  53.                     stone.setSize(size);  
  54.                     gameList.add(stone);  
  55.                 }  
  56.             }  
  57.         } catch (Exception e) {  
  58.             e.printStackTrace();  
  59.         }  
  60.         return gameList;  
  61.     }  
  62.   
  63. }  

写好方法后,就可以引用 了,如下:

 

 

[java] 
 
  1. import java.util.ArrayList;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.util.Log;  
  5. import android.view.View;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         findViewById(R.id.test).setOnClickListener(new View.OnClickListener() {  
  14.             @Override  
  15.             public void onClick(View v) {  
  16.                 init();  
  17.             }  
  18.         });  
  19.   
  20.     }  
  21.       
  22.     private void init(){  
  23.         ArrayList<Stone> list = new ArrayList<Stone>();  
  24.         for (int i = 0; i < 5; i++) {  
  25.             Stone stone = new Stone();  
  26.             stone.setName("Name" +i);  
  27.             stone.setSize("Size" + i);  
  28.             list.add(stone);  
  29.         }  
  30.         String json = JsonUtil.changeArrayDateToJson(list);  
  31.         Log.e("JSON", json);  
  32.     }  
  33.   
  34. }  

再看日志,就看到了生成的JSON数据:

 

 

[java] 
 
  1. {
    "stones":[{
    "size":"Size0","name":"Name0"},{
    "size":"Size1","name":"Name1"},{
    "size":"Size2","name":"Name2"},{
    "size":"Size3","name":"Name3"},{
    "size":"Size4","name":"Name4"}]}  

以上就是如何生成JSON数据,解析请参照第二个方法。

转载于:https://www.cnblogs.com/Free-Thinker/p/4347118.html

你可能感兴趣的文章
【转载】基于vw等viewport视区相对单位的响应式排版和布局
查看>>
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
backgound-attachment属性学习
查看>>
个人作业——关于K米的产品案例分析
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
java web 中base64传输的坑
查看>>
java 中的线程(一)
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
素数判断BFS之“Prime Path”
查看>>
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>