JSON解析案例(js和java版)

1,首先读取json文件
1)json数据类型 {“a”:“一”,“b”:[“c”,“d”],“e”:[{“f”:“g”,“h”:“i”},{“j”:“k”}]}
2)java代码

//读取JSON文件
    public static String readJsonFile(String fileName) {
        String jsonStr ="";
        try {
            File jsonFile = new File(fileName);
            FileReader fileReader = new FileReader(jsonFile);
            Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
            int ch = 0;
            StringBuffer sb = new StringBuffer();
            while ((ch = reader.read()) != -1) {
                sb.append((char) ch);
            }
            fileReader.close();
            reader.close();
            jsonStr = sb.toString();
            //jsonStr的首字符是空格,这应该是文件本身的问题,所以去除之(埋个坑,也可能是文件读取的机制问题,以后空了再看看)
            jsonStr = jsonStr.substring(1,jsonStr.length());//左闭右开
            return jsonStr;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

读取完以后返回json字符串
2,开始解析

public void test1(String json) throws JSONException {
        //存放结果
        List<Map<String,String>> lists = new ArrayList<>();
        //根据json字符串创建json对象
        JSONObject jObject1 = new JSONObject(json);
        //生成索引的迭代器
        Iterator<String> iterator1 = jObject1.keys();
        while (iterator1.hasNext()) {
            //得到索引值,和值
            String key = iterator1.next();
            String value = jObject1.getString(key);
            //解析数组类型的值,为了解析出所有的数组类型
            //注意,下面的代码并不是解析json的通用代码,而是
            //根据具体的json数据定制的
			
			//如果键值是一个数组的话就要判断一下,看是否里面还有
			//json对象
            if (value.startsWith("[")) {
                JSONArray jsonArray = jObject1.getJSONArray(key);
                if(jsonArray.toString().charAt(1)=='"'){
                    Map<String,String> map = new HashMap<>();
           //这里不用map直接存键值对是因为map会自动消除重复的key,所以采用数组的方式
                    map.put(key,value);
                    lists.add(map);
                }
                else if(jsonArray.toString().charAt(1)=='{'){
                    for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject sonObject = jsonArray.getJSONObject(i);
                            Iterator<String> iterator2 = sonObject.keys();
                            while (iterator2.hasNext()) {
                                //得到索引值,和值
                                String key2 = iterator2.next();
                                String value2 = sonObject.getString(key2);
                                Map<String,String> map = new HashMap<>();
                                map.put(key2,value2);
                                lists.add(map);
                            }
                        }
                    }
                }
            else {
                Map<String,String> map = new HashMap<>();
                map.put(key,value);
                lists.add(map);
            }
            }
        int i=0;
        //遍历读取lists里面的值
        for (Map<String,String> list : lists) {
            for(Map.Entry<String,String> res:list.entrySet()){
                System.out.println("第"+i+"项内容:"+res.getKey()+"->"+res.getValue());
                i++;
            }

        }
        }

3,js版本

//json是json字符串,用$.parseJSON解析为对象
 var obj = $.parseJSON(json)
 //lists存储结果
    var lists = []
    for(var item in obj){
 //这里是判断读取的第一层键值是否为对象,且是一个包含json对象的数组对象
        if((typeof obj[item] == 'object') && JSON.stringify(obj[item]).indexOf('{') == 1){
//遍历数组里面的json对象,也就是遍历[{key:value},{..},{..}]这样的数据
            for (var i = 0 ; i < obj[item].length; i++) {
            //遍历一个对象中的键值
                for (var subItem in obj[item][i]) {
                    var map = new Map()
                    map.set(subItem,obj[item][i][subItem])
                    lists.push(map);
                }
            }
            //跳过余下的语句,从对应的for循环再次运行
            continue;
        }
        //存储一般的数据
        var map = new Map();
        map.set(item,obj[item])
        lists.push(map)
    }
    //打印内容
    for(var j=0;j<lists.length;j++){
        lists[j].forEach(function (value, key, map) {
            console.log("第"+j+"项内容:"+key+"->"+value)        })
    }

运行效果(数据为没有意义的虚拟数据):
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值