java 处理 大 json 字符串

2 篇文章 0 订阅
[/code]java 代码处理 json 字符串,存在很多种方法,最直接的就是直接反射成java bean ,但是 如果json字符串过于复杂,反而是得其反,需要写大量代码,我才不干!
所以 下面我找到一种更简单的方法,往下看,小伙伴。

我现在返回的数据是下面这个
[code="java"]
{
"code": 0,
"message": "交易成功",
"object": {
"head": {
"version": "1.0.0",
"code": "contract_setting_info",
"timestamp": 1400138523979
},
"body": {
"contractSettings": [
{
"contractDict": {
"code": "YGXAG9995",
"name": "粤贵银9995",
"market_code": "PMEC",
"status": 1,
"sort": 0
},
"contractEx": {
"unit_number": 15,
"unit_type": "KG",
"min_quote_unit": 1,
"min_var_unit": 1,
"step_unit": 1,
"currency": "CNY",
"quote_type": 1
},
"contractProtect": {
"spread": 20,
"time_interval": 60000
},
"contractAccess": null
},
{
"contractDict": {
"code": "YGXAG9999",
"name": "粤贵银9999",
"market_code": "PMEC",
"status": 1,
"sort": 0
},
"contractEx": {
"unit_number": 1,
"unit_type": "KG",
"min_quote_unit": 1,
"min_var_unit": 1,
"step_unit": 1,
"currency": "CNY",
"quote_type": 1
},
"contractProtect": {
"spread": 20,
"time_interval": 600
},
"contractAccess": null
},
{
"contractDict": {
"code": "YGXAG100G",
"name": "粤贵银100G",
"market_code": "PMEC",
"status": 1,
"sort": 0
},
"contractEx": {
"unit_number": 100,
"unit_type": "g",
"min_quote_unit": 0.001,
"min_var_unit": 0.001,
"step_unit": 0.001,
"currency": "CNY",
"quote_type": 1
},
"contractProtect": {
"spread": 20,
"time_interval": 600
},
"contractAccess": null
}
]
}
},
"success": true
}


我艹 ,这么长!! 没良心的,叫我怎么处理,而且还是字符串。实际上原本更长,这里只是三个值。其实有100以上的数量。
好了 ,现在开始。

第一步 需要用到这几个包

现使用json-lib组件实现
* 需要
* json-lib-2.4-jdk15.jar
* ezmorph-1.0.6.jar
* commons-collections-3.1.jar
* commons-lang-2.0.jar
* 支持


第二步
开始转换


JSONObject jsonObject = JSONObject.fromObject(strRet);
JSONObject j1 = JSONObject.fromObject(jsonObject.get("object"));
JSONObject j2 = JSONObject.fromObject(j1.get("body"));

但是有些属性 路径太深 怎么办,没事。
可以这样解决
第一步 // 将JsonObject对象转换成JavaBean对象
Object bean = JSONObject.toBean(jsonObject);
第二部 PropertyUtils.getProperty(bean, "object.body.userCode").toString()

是不是很爽啊?


通过这样的方式 可以不断获取 json 字符串里面的东东,想要什么要什么。

但是我看到 json字符串里面存在大量的数组 ,我艹,这该怎么办。你妹的。

小伙伴别怕

// 遍历 json accounts 数组 ,获取其为true的账户
JSONArray ja = JSONArray.fromObject(j2.get("accounts"));

我先拿到目标数组 定位到你
for(int i=0;i<ja.size();i++){
JSONArray ja2 = ja.getJSONArray(i);
for(int j = 0;j<ja2.size();j++){
if("true".equals(ja2.get(j))){
account = ja2.getString(0);
}
}
}

接着 循环 想要哪个值 要哪个值。 爽吧。
小伙伴要是不明白了 可以加我 984814676 企鹅




{
"response": {
"data": [
{
"address": "南京市游乐园",
"province": "江苏",
"district": "玄武区",
"city": "南京"
}
]
},
"status": "ok"
}




package com.gdiex.sts.test;

import java.lang.reflect.InvocationTargetException;

import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Test;

public class Test_Json {

@Test
public void main() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
String strJson = "{\"response\":{\"data\":[{\"address\":\"南京市游乐园\",\"province\":\"江苏\",\"district\":\"玄武区\",\"city\":\"南京\"}]},\"status\":\"ok\"}";
try {
JSONObject jsonobj=JSONObject.fromObject(strJson);//将字符串转化成json对象
System.out.println(jsonobj);

Object bean = JSONObject.toBean(jsonobj);
System.out.println(PropertyUtils.getProperty(bean, "response.data"));
JSONObject response = JSONObject.fromObject(jsonobj.get("response"));
JSONArray jsonArray = JSONArray.fromObject(response.get("data"));
for (int i=0;i<jsonArray.size();i++) {
System.out.println(jsonArray.get(i));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

annan211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值