双层嵌套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
版权声明:本文为博主原创文章,未经博主允许不得转载。
双层嵌套json字符串(即json对象内嵌json数组)解析为Map的更多相关文章
- json字符串对象内嵌json对象
有时候需要在json的key:value字符串对象中再嵌入一个json对象,如果需要把如下的json对象作为字符串嵌入到json字符串对象中: { "type": 2, " ...
- JSON字符串和Javascript对象字面量
JSON字符串和Javascript对象字面量 JSON是基于Javascript语法的一个子集而创建的,特别是对象和数组字面量语法. 正是由于JSON的这种特殊来历,导致很多Javascript程序 ...
- JSON字符串和JS对象之间的转换
JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eva ...
- JSON 字符串转换为 JavaScript 对象
将数据组合成json格式的字符串var text = '{ "sites" : [' + '{ "name":"Runoob" , &quo ...
- 利用FastJson,拼接复杂嵌套json数据&&直接从json字符串中(不依赖实体类)解析出键值对
1.拼接复杂嵌套json FastJson工具包中有两主要的类: JSONObject和JSONArray ,前者表示json对象,后者表示json数组.他们两者都能添加Object类型的对象,但是J ...
- JSON字符串和java对象的互转【json-lib】
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- JSON字符串与java对象的转换
所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...
- JSON 字符串 与 java 对象的转换
jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //j ...
- json 字符串转换成对象,对象转换成json字符串
json 字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法: [注意jquery版本问题] var str = '{"name":&qu ...
随机推荐
- C语言实现某年某月某日是某年的第几天
看到这个标题,想实现这样的功能其实挺简单的,用C语言的switch语句加上闰年,平年条件的判断,再加上一定的逻辑可以轻松实现这样的函数,在linux内核中,存在判断闰年平年的接口,我将它移植出来后,写 ...
- rails应用ajax之二:使用rails自身支持
考虑另一种情况: 1. 页面上半部分显示当前的所有用户,页面下半部分是输入新用户的界面: 2. 每当输入新用户时,页面上半部分会动态更新新加用户的内容: 我们还是用ajax实现,不过这次用rails内 ...
- Django之ModelForm
简介 Model + Form ==> ModelForm.model和form的结合体,所以有以下功能: 验证 数据库操作 Form回顾 models.py class UserType(mo ...
- iOS苹果自带UIMenuController
一.UIMenuController认识 1.默认情况下,UITextView / UITextFiled / UIWebView 都有苹果自带的有UIMenuController功能 2.UITex ...
- 《转》iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑
最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理 ...
- Linux命令之文件搜索
locate 文件名 locate只能搜索文件名,不能搜索文件大小.搜索速度快. locate并不会搜索到那些新加入的文件.新加入文件后,使用updatedb,更新数据库后,再使用locate搜索. ...
- htmlDOM操作1
DOM 是 Document Object Model(文档对象模型)的缩写. HTML 的标准对象模型 HTML 的标准编程接口 HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它 ...
- mongodb查询语句
左边是mongodb语句,右边是sql语句 db.users.find() select * from users db.users.find({"age" : 27}) sele ...
- HDU-5738
Eureka Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- Java并发-对象共享
我们不仅希望防止某个线程正在使用对象状态而其他的线程正在修改该状态,而且希望当一个线程修改了对象状态后,其他的线程能够看到发生的状态变化. 可见性:当读操作和写操作在不同的线程中进行时,他们的动作是共 ...