zoukankan      html  css  js  c++  java
  • jsonArray与jsonObject

    最近两个星期接触最多的就是json和map了。

       之前用到的json,就是一个键对应一个值,超级简单的一对一关系。现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个数据还那么麻烦。其实,就跟if else语句一样,如果if中套if,if中再套if,写的规范了还行,要是代码格式不规范,那我们肯定也看着麻烦。所以啊,对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了。 举个例子说明,如下:


          从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。

        工作中需要取出name4的值,你们会怎么取呢?。最初我都想过字符串截取,那时还不了解JSONArray,现在知道了,取出来也就相当容易了。

        取出name4值过程步骤:1,将以上字符串转换为JSONArray对象;2,取出对象的第一项,JSONObject对象;3,取出name1的值JSONObject对象;4,取出name2的值JSONObject对象;5,取出name4的值value2。

        示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:JSONArray.fromObject(String)

    [java] view plain copy
     
     print?
    1. </pre><pre name="code" class="java">JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式  
    2. JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项  
    3. String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getJSONObject("name4");  

       好了我们说说这两个对象。

    1,JSONObject

     json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}

    2,JSONArray

      json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的

      Json对象中添加的是键值对,JSONArray中添加的是Json对象

    [java] view plain copy
     
     print?
    1. JSONObject Json = new JSONObject();  
    2. JSONArray JsonArray = new JSONArray();  
    3.   
    4. Json.put("key", "value");//JSONObject对象中添加键值对  
    5. JsonArray.add(Json);//将JSONObject对象添加到Json数组中  

    3,JSONObject与Map

       Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。

    [java] view plain copy
     
     print?
    1. Map<String,String> strmap=new JSONObject();  

      这里的需求是:request对象获取的map,想要返回json格式也不用白费力了。。。。哈哈。。

    具体例子:

    jsonObject就是json格式的数据: {键值},jsonArray就是在外面是数组形式的json:[{键值}]

    json的取值:

    java不像PHP解析和生产JSON总是一个比较痛苦的过程。但是使用JSONObject和JSONArray会让整个过程相对舒服一些。

    需要依赖的包:commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar  ezmorph.jar json-lib-2.2.2-jdk15.jar

    1. 创建一个JSONObject对象:

    package com.yunos.tv.video.resource.controller.web;

    import java.util.ArrayList;
    import java.util.HashMap;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    
    public class Test {
    
        public static void main(String[] args) {
            //JsonObject和JsonArray区别就是JsonObject是对象形式,JsonArray是数组形式
            //创建JsonObject第一种方法
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("UserName", "ZHULI");
            jsonObject.put("age", "30");
            jsonObject.put("workIn", "ALI");
            System.out.println("jsonObject1:" + jsonObject);
            
            //创建JsonObject第二种方法
            HashMap<String, String> hashMap = new HashMap<String, String>();
            hashMap.put("UserName", "ZHULI");
            hashMap.put("age", "30");
            hashMap.put("workIn", "ALI");
            System.out.println("jsonObject2:" + JSONObject.fromObject(hashMap));
            
            //创建一个JsonArray方法1
            JSONArray jsonArray = new JSONArray();
            jsonArray.add(0, "ZHULI");
            jsonArray.add(1, "30");
            jsonArray.add(2, "ALI");
            System.out.println("jsonArray1:" + jsonArray);
            
            //创建JsonArray方法2
            ArrayList<String> arrayList = new ArrayList<String>();
            arrayList.add("ZHULI");
            arrayList.add("30");
            arrayList.add("ALI");
            System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));
            
            //如果JSONArray解析一个HashMap,则会将整个对象的放进一个数组的值中
            System.out.println("jsonArray FROM HASHMAP:" + JSONArray.fromObject(hashMap));
            
            //组装一个复杂的JSONArray
            JSONObject jsonObject2 = new JSONObject();
            jsonObject2.put("UserName", "ZHULI");
            jsonObject2.put("age", "30");
            jsonObject2.put("workIn", "ALI");
            jsonObject2.element("Array", arrayList);
            System.out.println("jsonObject2:" + jsonObject2);
                    
        }
    }
    

    结果:

    jsonObject1:{"UserName":"ZHULI","age":"30","workIn":"ALI"}
    jsonObject2:{"workIn":"ALI","age":"30","UserName":"ZHULI"}
    jsonArray1:["ZHULI","30","ALI"]
    jsonArray2:["ZHULI","30","ALI"]
    jsonArray FROM HASHMAP:[{"workIn":"ALI","age":"30","UserName":"ZHULI"}]
    jsonObject2:{"UserName":"ZHULI","age":"30","workIn":"ALI","Array":["ZHULI","30","ALI"]}

    解析JSON字符串:

    package com.yunos.tv.video.resource.controller.web;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    
    public class Test {
    
        public static void main(String[] args) {
            String jsonString = "{"UserName":"ZHULI","age":"30","workIn":"ALI","Array":["ZHULI","30","ALI"]}";
            //将Json字符串转为java对象
            JSONObject obj = JSONObject.fromObject(jsonString);
            //获取Object中的UserName
            if (obj.has("UserName")) {
                System.out.println("UserName:" + obj.getString("UserName"));
            }
            //获取ArrayObject
            if (obj.has("Array")) {
                JSONArray transitListArray = obj.getJSONArray("Array");
                for (int i = 0; i < transitListArray.size(); i++) {
                    System.out.print("Array:" + transitListArray.getString(i) + " ");
                }
            }
        }
    }
    


    返回:

    UserName:ZHULI
    Array:ZHULI Array:30 Array:ALI 
  • 相关阅读:
    sublime 2/3 for mac link to command
    语言设计中的鸭子类型风格
    Android布局分析工具HierarchyView的使用方法
    自定义的圆形ProgressBar
    自动移动的ImageView
    Shape 各种属性详解
    用GridLayout实现计算器的布局
    Toast的用法(可以设置显示时间,自定义布局的,线程中的Toast)
    Shape画圆形控件
    用ImageSwitcher实现显示图片(更改图片时有动画效果)
  • 原文地址:https://www.cnblogs.com/fengli9998/p/7381292.html
Copyright © 2011-2022 走看看