双层嵌套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

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

时间: 2024-10-14 01:22:42

双层嵌套json字符串(即json对象内嵌json数组)解析为Map的相关文章

Json字符串转换为java对象

1.  Json字符串转换为java对象 1.1.  Json字符串转换为java bean Json2Bean.java package jackson; import java.io.IOException; import org.codehaus.jackson.map.ObjectMapper; public class Json2Bean { public static void main(String[] args) throws IOException{ String jsonSt

JSON字符串和JS对象之间的转换

1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eval('('+str+')') eval('['+str+']') 对象字符串 "{\"id\":\"001\",\"name\":\"sanzhang\"}" 对应的json格式 {"id":"001",&q

JSON 字符串转换为 JavaScript 对象

将数据组合成json格式的字符串var text = '{ "sites" : [' + '{ "name":"Runoob" , "url":"www.runoob.com" },' + '{ "name":"Google" , "url":"www.google.com" },' + '{ "name":

JSON 字符串 与 java 对象的转换

jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //json-lib-2.2-jdk15.jar import net.sf.json.JSONArray;import net.sf.json.JSONObject; 1. //把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromOb

Json对象与Json字符串的转化、JSON字符串与Java对象的转换

Json对象与Json字符串的转化.JSON字符串与Java对象的转换 一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.stringify(obj)将JSON转为字符串.JSON.parse(string)

json字符串与java对象互转

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串 [

使用js把json字符串转为js对象的方法

ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5)中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐怕这是最早的解析方式了.如下: 复制代码代码如下: function strToJson(str){ var json = eval('(' + str + ')'); return json; } 记得别忘了str两旁的小括号. 这里属性名可以使用数字,可以带引号也可以不带引号.如果属性名是纯数字,

JSON字符串与java对象的转换

所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar 5.ezmorph.jar 6.json-lib-2.2.2-jdk15.jar 1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(userlist); String jsonstr = array.toSt

C#如何生成JSON字符串?(序列化对象)

第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口(服务器)? 上一篇文章中我们讲解了序列号JSON数据,这篇文章我们来讲解一下反序列化JSON数据,也就是将实体类转化成JSON数据,其实也非常简单,说白了,就是将实体初始化. 一样,我们跟着前两篇的代码,在添加 一个按钮,在按钮事件里面写代码.先看效果吧. 接下俩是按钮事件 using Syste