[/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();
}
}
}