`
mp_juan
  • 浏览: 10782 次
  • 性别: Icon_minigender_1
  • 来自: 四川
最近访客 更多访客>>
社区版块
存档分类
最新评论

请问下面这个json字符串怎么解析为java对象

阅读更多

有这样一个json字符串,要求将其解析为java对象,有什么好的办法吗

{"name":"duck","books":[{"title":"test","pages":300,"author":{"country":"china"},"lovers":[{"lovername":"jack","loversex":"female"}]}],"sex":"male","wife":{"name":"lucy","age":32}}

 

分享到:
评论
1 楼 mp_juan 2010-06-25  
昨天写了一个JsonDecoder类,解决了这个问题,不说废话,代码如下
package pe.core.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JsonDecoder {
private String[] getSplit(String json, char leftSplit, char rightSplit) {
if (json != null && json.length() >= 2) {
char[] chars = json.toCharArray();
chars[0] = chars[chars.length - 1] = ' ';
for (int i = 0; i < chars.length - 2; i++) {
char f = chars[i];
if (i >= 1) {
if (((f == ',' && chars[i - 1] == leftSplit && chars[i + 1] == rightSplit)
|| (f == ',' && chars[i + 1] == rightSplit)
||(f==','&&chars[i-1]==']'&&chars[i+1]==rightSplit))
&&(true)) {
chars[i] = '#';
}
}
}
StringBuilder tmp=new StringBuilder(new String(chars));
int start=0;
if((start=tmp.indexOf(":[{"))!=-1){
String as=tmp.substring(start,tmp.indexOf("}]")+2);
as=as.replaceAll("#", ",");
tmp=tmp.replace(start, tmp.indexOf("}]")+2, as);
}
if((start=tmp.indexOf(":{"))!=-1){
int end=indexOf(tmp,"}",start,1);
String as=tmp.substring(start,end);
as=as.replace("#", ",");
tmp=tmp.replace(start, end, as);
}
return tmp.toString().trim().split("#");
}
return null;
}

private int indexOf(String org,String reg,int appearIndex){
if(org==null&&reg==null&&appearIndex<=0){
return (-1);
}
int found=0;
int count=0;
while((found=org.indexOf(reg))!=-1){
count++;
if(appearIndex==count)
break;
}
return found+count-1;
}
private int indexOf(StringBuilder org,String reg,int appearIndex){
return indexOf(org.toString(),reg,appearIndex);
}

private int indexOf(String org,String reg,int start,int appear){
if(org==null&&reg==null&&appear<=0){
return (-1);
}
String tmp=org.substring(start);
int found=0;
int count=0;
while((found=tmp.indexOf(reg))!=-1){
count++;
if(appear==count)
break;
}
return start+found+2;
}

private int indexOf(StringBuilder org,String reg,int start,int appear){
return indexOf(org.toString(),reg,start,appear);
}
private void replace(String org,String str,int start,int end){
if(org==null&&str==null){
return;
}
int length=org.length();
if(length<start||start<0){
return;
}
StringBuilder sb=new StringBuilder(org);
sb=sb.replace(start, end>length?length:end, str);
}

private String[] getMSplit(String json){
if(containsJsonArray(json)){
json=json.replaceFirst(":", "#");
return json.trim().split("#");
}else if(containsJsonObj(json)){
json=json.replaceFirst(":", "#");
return json.trim().split("#");
}
return json.split(":");
}

private boolean containsJsonArray(String json){
return json!=null&&json.contains("[{")&&json.contains("}]");
}

private boolean containsJsonObj(String json){
return json!=null&&json.contains(":{")&&json.contains("}");
}

public Map parseSingleObject(String json) {
Map m = new HashMap();
String[] s = this.getSplit(json, '"', '"');
if (s != null && s.length > 0) {
for (int i = 0; i < s.length; i++) {
String[] keys = this.getMSplit(s[i]);
String key=replace(keys[0]);
String value=keys[1].trim();
if(isJsonArray(value)){
List list=this.parseList(value);
m.put(key, list);
}else if(isJsonObject(value)){
Map d=this.parseSingleObject(value);
m.put(key, d);
}else{
m.put(key, replace(value));
}
}
}

return m;
}

private boolean isJsonArray(String array){
return array!=null&&array.startsWith("[")&&array.endsWith("]");
}

private boolean isJsonObject(String map){
return map!=null&&map.startsWith("{")&&map.endsWith("}");
}

public List<Map> parseList(String json) {
if (json.startsWith("[") && json.endsWith("]")) {
String[] items = this.getSplit(json, '}', '{');
List<Map> rs = null;
if (items != null && items.length > 0) {
rs = new ArrayList<Map>();
for (int i = 0; i < items.length; i++) {
rs.add(this.parseSingleObject(items[i]));
}
}
return rs;
}
return null;
}

private String replace(String src) {
return src.replaceAll("\"", "").trim();
}

public static void main(String[] args) {
JsonDecoder decoder = new JsonDecoder();
String json = "{\"name,h\":\"duck\",\"password\":\"123456\",\"password2\":123456,\"sex\":true}";
Map m=decoder.parseSingleObject(json);
System.out.println(m);
}
}

该结果为----->
{sex=true, password2=123456, password=123456, name,h=duck}
一个Map的键值对,能够支持更加复杂的JSON对象字符串到Map的转换,比如
{"user":{"name":"jake","age":32,"isPm":true},"books":[{"title":"老人与海","pagesCount":500},{"title":"宝岛骑兵","pagesCount":200}]}
针对这样的json字符串,结果解析为
一个Map,其中user的值为一个Map,books的值为一个List<Map>类型

相关推荐

    java对象转换为json字符串或字符串数组

    在Java开发中,将Java对象转换为JSON字符串或字符串数组是一项常见的任务,特别是在与前端交互、数据存储或者网络传输时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    解析Json字符串直接转换为对象(包括多层List集合 嵌套)所用jar包

    在Java编程中,JSON...总之,Java中的Jackson库提供了一种高效且灵活的方式来解析JSON字符串,将其转换为对应的Java对象。无论是简单的键值对还是复杂的嵌套结构,Jackson都能够胜任,极大地简化了开发人员的工作。

    使用json-lib将java对象转换成json字符串

    标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...

    java解析Json字符串

    使用Gson,你可以将Java对象转换为对应的JSON字符串,反之亦然。例如,如果你有一个User类,你可以轻松地将其对象转换为Json字符串: ```java import com.google.gson.Gson; class User { String name; int age;...

    使用Java操作JSON字符串对象

    使用Java操作JSON字符串对象,使用Java操作JSON字符串对象

    模仿json,根据对象生成json字符串,根据字符串生成对象

    以`com.google.gson`为例,我们需要创建一个`Gson`实例,然后调用`toJson()`方法将Java对象转换为JSON字符串。例如,我们有一个名为`Person`的类,包含`name`和`age`属性,可以这样做: ```java import ...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    本文将详细介绍如何将JSON字符串直接转换为Java对象,特别是涉及到多层List集合的情况。在本例中,我们将使用`net.sf.json.JSONObject`类来实现这一功能。 首先,确保你的项目中已经引入了必要的库。在使用`...

    java中解析json字符串

    除了解析JSON字符串到Java对象,这两个库还支持将Java对象转换为JSON字符串,以及解析JSON到Map或List等数据结构。 3. **其他库** 除了Jackson和Gson,还有其他的JSON处理库,如org.json(提供简单的JSON工具类)...

    利用java反射将json字符串转成对象.zip

    要将JSON字符串转换为Java对象,我们首先需要将JSON解析成一个Map或List。JSON库如Gson提供了`fromJson()`方法来实现这个过程。例如,使用Gson库的代码可能如下: ```java import com.google.gson.Gson; import ...

    json 字符串转java对象,java对象转json字符串

    自己有空时用java反射写的json转化工具,有不完善之处,多包涵

    递归下降文法-Json字符串转换成Java对象

    用java实现的递归下降文法 将JSon字符串转换成Java对象 为了简单化 忽略了很多情况 仅仅作为初接触编译原理的同学们共勉 User对象有一个Teacher对象 Teacher里有一个Book对象 等等 比如 User user User json User ...

    复杂的json字符串解析(真实案例)

    Gson是Google提供的一个Java库,它能够将Java对象转换为JSON字符串,反之亦然。在解析复杂的JSON字符串时,Gson提供了强大的功能,包括对嵌套结构的支持和自定义类型适应。 首先,我们要了解JSON的基本结构。JSON...

    JSON字符串和java对象的相互转换

    相反,如果我们要将Java对象转换为JSON字符串,同样可以使用Gson库: ```java User user = new User(); user.setName("John"); user.setAge(30); // 转换为JSON字符串 Gson gson = new Gson(); String jsonString ...

    json字符串解析工具

    3. **转换**:它可以将JSON字符串转换为Java对象,这对于开发人员在Java应用中处理JSON数据非常有用。通过这个工具,开发者可以快速地将JSON数据映射到Java类的实例。 4. **操作**:可能支持对JSON对象进行操作,如...

    json字符串转化为list泛型

    在Java编程中,我们经常需要将JSON格式的数据转换为Java对象,这通常涉及到将JSON字符串转化为List泛型。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    JSON 字符串 与 java 对象的转换

    `json-lib`是一个用于处理JSON的Java库,它可以将Java对象转换成JSON字符串,也可以将JSON字符串解析成Java对象。`json-lib`支持多种类型的Java对象,包括普通Java对象、集合类型等。 #### 三、环境准备 在使用`...

    解析json字符串封装成java对象.docx

    本示例代码提供了一个简单的解析JSON字符串到Java对象的实现,虽然不使用流行的库如Gson或Jackson,但可以理解其基本原理。 `JSONReader` 类的核心在于使用了“递归迭代”的方法来解析JSON。这个类中定义了一些常量...

    java转json串的几种方法

    以下我们将详细探讨Java中将对象转换为JSON字符串的三种方法,这里使用的是阿里巴巴的Fastjson库,它是一个高性能的JSON库,提供了丰富的API来处理JSON与Java对象之间的转换。 1. **将Java对象转成JSON串** 当我们...

    json2.js 字符串转转json对象工具

    1. `JSON.parse()`方法用于将一个JSON字符串转换为JavaScript对象。在JSON中,数据被表示为键值对(key-value pairs)的集合,而JavaScript对象正是以这种方式存储数据。例如,如果你有一个JSON字符串`'{"name": ...

    json字符串解析工具google

    1. **JSON到Java对象的反序列化**:Gson可以将JSON字符串解析为对应的Java对象,无论是基本类型、自定义类实例还是集合类型。例如,有一个JSON字符串`{"name":"John","age":30}`,Gson可以将其转换为一个包含name和...

Global site tag (gtag.js) - Google Analytics