雙層嵌套json字串(即json對象內嵌json數組)解析為Map

來源:互聯網
上載者:User

雙層嵌套json字串(即json對象內嵌json數組)解析為Map

之前我層寫過一篇文章,介紹了json與map的相互轉化,但當時只涉及到單一的json對象或json數組,對json對象內嵌套這json數組的json字串無法處理,這篇文章主要解決這個問題。 
首先要在項目中匯入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 getMapByJson(String json) {        Map map = new HashMap();        // 最外層解析        JSONObject object = object = JSONObject.fromObject(json);        for (Object k : object.keySet()) {            Object v = object.get(k);            map.put(k.toString(), v);        }        Map map2 = new HashMap();        //第二層解析 第二層可能是 也可能不是        for(Map.Entry 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 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 entry:map.entrySet()){            System.out.println(key:+entry.getKey()+-value:+entry.getValue());        }    }}

運行結果如下:

key:3-value:4key:2-value:2key:1-value:1key:height-value:1key:左側-value:2key:4-value:4key:width-value:1key:底部-value:1key:懸浮-value:4key:右側-value:1key:頂部-value:3

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.