json取值方法

 
package com.test.demo.xmljson;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 
 * @author
 *  json格式取数据
 */
public class JsonFormatCls {

    /**
     * 获取json数据
     * 以“{”开头的是对象格式获取时用 getJSONObject()
     * 以“[”开头的是数组格式获取时用getJSONArray()
     * 
     */
    public static  void  getJsonData(){
        String jsonData="{\"test\":{\"scholl\":{\"schollitem\":{\"name\":\"神州希望小学\",\"phone\":\"68686868\",\"address\":\"XXX省XXX市XXX县\"},\"sclass\":{\"-stype\":\"一级部\",\"classitem\":[{\"teacher\":\"Z老师\",\"classname\":\"一年级\",\"studentnum\":\"30\"},{\"teacher\":\"Y老师\",\"classname\":\"二年级\",\"studentnum\":\"35\"},{\"teacher\":\"J老师\",\"classname\":\"三年级\",\"studentnum\":\"39\"},{\"teacher\":\"H老师\",\"classname\":\"四年级\",\"studentnum\":\"30\"}]}}}}";
        JSONObject obj= JSONObject.fromObject(jsonData);
        System.out.println("obj"+"-----"+obj);
        JSONObject schollObj=obj.getJSONObject("test").getJSONObject("scholl");
        System.out.println("testObj"+"------"+schollObj);
        if(schollObj.toString().length()>0){//判断是否包含该节点
            JSONObject schollitem=schollObj.getJSONObject("schollitem");
            System.out.println("schollitem"+"------"+schollitem);
            String name=schollitem.get("name").toString();
            String phone=schollitem.get("phone").toString();
            String address=schollitem.get("address").toString();
            System.out.println("name"+name+"----phone-----"+phone+"----address----"+address);
            
            JSONObject jsonClass= schollObj.getJSONObject("sclass");
            System.out.println("scalss-----"+jsonClass);
            String type=jsonClass.get("-stype").toString();
            System.out.println("jsonClass"+jsonClass+"----type-----"+type);
            
             final char[] strChar = jsonClass.get("classitem").toString().substring(0, 1).toCharArray();  //获取classitem内容首字符
             final char firstChar = strChar[0];
             //此处判断获取的内容的首字符是"["还是"{",如果是"["用getJSONArray()获取节点,如果是“{”用getJSONObject()获取。
             if(firstChar=='['){
            
                JSONArray classitemArray= jsonClass.getJSONArray("classitem");
                for (int i = 0; i < classitemArray.size(); i++) {    
                String teacher=classitemArray.getJSONObject(i).get("teacher").toString();
                String classname=classitemArray.getJSONObject(i).get("classname").toString();
                String studentnum=classitemArray.getJSONObject(i).get("studentnum").toString();
                System.out.println("teacher:"+teacher+"---"+"classname:"+classname+"----studentnum:"+studentnum);
                }
             }else if(firstChar=='{'){
                 
                JSONObject classitemObject= jsonClass.getJSONObject("classitem");
                String teacher=classitemObject.get("teacher").toString();
                String classname=classitemObject.get("classname").toString();
                String studentnum=classitemObject.get("studentnum").toString();
                System.out.println("teacher:"+teacher+"---"+"classname:"+classname+"----studentnum:"+studentnum);
             }
        }
        
    }
    
    public static void  main(String [] args){
        getJsonData();
        
    }
}


 

JSON取值有多种方法,以下为你介绍不同场景下的取值方式: ### 常规取值 对于简单的JSON对象,可以通过键名直接访问对应的值。例如,有如下JSON对象: ```json { "name": "John", "age": 30 } ``` 在JavaScript中可以这样取值: ```javascript const json = { "name": "John", "age": 30 }; const name = json.name; const age = json["age"]; console.log(name); console.log(age); ``` ### 键为中文或数字的取值 如果JSON数据量大且键是中文或者数字,并且经常需要取值,可以建立查找表来提升性能。以下是一个创建查找表的示例函数: ```javascript function createLookMap(field) { var map = {}; for (var i = 0; i < jsonArr.length; i++) { var value = jsonArr[i]; var key = value[field]; map[key] = value; } return map; } ``` 使用时,先调用`createLookMap`函数创建查找表,然后通过查找表来取值。 ### 复杂JSON结构取值 对于嵌套层级较深的JSON数据,可以使用JSONPath来提取所需的数据。JSONPath是一种强大的数据提取工具,它可以帮助开发者从JSON数据中灵活地提取所需信息。比如有如下复杂JSON: ```json { "students": [ { "name": "Alice", "grades": { "math": 90, "english": 85 } }, { "name": "Bob", "grades": { "math": 78, "english": 88 } } ] } ``` 若要获取所有学生的数学成绩,使用JSONPath表达式`$.students[*].grades.math`可以实现。不同编程语言有不同的JSONPath库来支持该功能。 ### 通过工具获取JSON数据 在实际开发中,可能需要先获取JSON数据,常见的方式是使用JSON工具将对象序列化成JSON,常用工具有Jackson、fastjson、gjson等,然后利用`HttpServletResponse`获取`response.getOutputStream()`或者`PrintWriter`进行输出 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值