zoukankan      html  css  js  c++  java
  • 双层嵌套json字符串(即json对象内嵌json数组)解析为Map

    之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题。
    之前的那篇文章址:http://blog.csdn.net/u012116457/article/details/24371877
    首先要在项目中导入json的jar包:
    这里写图片描述
    在下面的代码中处理json对象既使用了net.sf.json.JSONObject 也使用了org.json.JSONObject 两个的包都要导。

    首先在E盘下创建一个priceJson.txt,写入一下内容:

    {
        "height":1,
        "width":1,
        "location":[
                   {
                   "顶部":"3"
                   },{
                   "底部":"1"
                   },{
                   "左侧":"2"
                   },{
                   "右侧":"1"
                   },{
                   "悬浮":"4"
                   }
        ],
        "type":[
                 {
                   "1":"1"
                   },{
                   "2":"2"
                   },{
                   "3":"4"
                   },{
                   "4":"4"
                   }
        ]
    }

    下面的类会通过read方法将文件中的json串读取出来,通过getMapByJson获取到map:

    package com.ngsh.common;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import net.sf.json.JSONObject;
    
    import org.json.JSONArray;
    
    public class FileIO {
    
        //读文件
        public String read(String path){
            String data = "";
            File file = new File(path);
            if(file.isFile()&&file.exists()){
                try {
                    InputStreamReader read = new InputStreamReader(
                        new FileInputStream(file),"utf-8");//考虑到编码格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while((lineTxt = bufferedReader.readLine()) != null){
                        data +=lineTxt;
                    }
                    read.close();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            return data;
    
        }
        //将json转换为map
        public Map<String, Object> getMapByJson(String json) {
            Map<String, Object> map = new HashMap<String, Object>();
            // 最外层解析
            JSONObject object = object = JSONObject.fromObject(json);
            for (Object k : object.keySet()) {
                Object v = object.get(k);
                map.put(k.toString(), v);
            }
            Map<String, Object> map2 = new HashMap<String, Object>();
            //第二层解析 第二层可能是 也可能不是
            for(Map.Entry<String, Object> entry:map.entrySet()){
                try {
                    JSONArray array = new JSONArray(entry.getValue().toString());  //判断是否是json数组
    
                    //是json数组
                    for (int i = 0; i < array.length(); i++) {
                        org.json.JSONObject object2 = array.getJSONObject(i);//json数组对象
                        JSONObject object3 = JSONObject.fromObject(object2.toString());  //json对象
                        for (Object k : object3.keySet()) {
                            Object v = object3.get(k);
                            map2.put(k.toString(), v);
                        }
                    }
                } catch (Exception e) {  //不是json串数组
                    map2.put(entry.getKey(), entry.getValue());
                }
            }
        /*  for(Map.Entry<String, Object> entry:map2.entrySet()){
                System.out.println(entry.getKey()+"-"+entry.getValue());
            }
        */
            return map2;
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
             String path="E:\priceJson.txt";
             FileIO fo = new FileIO();
             Map map = fo.getMapByJson(fo.read(path));
             for(Map.Entry<String, Object> entry:map.entrySet()){
                System.out.println("key:"+entry.getKey()+"-value:"+entry.getValue());
            }
        }
    
    }
    

    运行结果如下:

    key:3-value:4
    key:2-value:2
    key:1-value:1
    key:height-value:1
    key:左侧-value:2
    key:4-value:4
    key:width-value:1
    key:底部-value:1
    key:悬浮-value:4
    key:右侧-value:1
    key:顶部-value:3

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    luoguP2939 [USACO09FEB]改造路Revamping Trails
    出题
    数字游戏
    统一异常处理
    数据验证
    拦截器
    数据绑定和表单标签库
    类型转换和格式化
    Spring MVC入门
    4springboot:日志(下)
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931735.html
Copyright © 2011-2022 走看看