Json字符串

  1. json值格式

•数字(整数或浮点数)

•字符串(在双引号中)

•逻辑值(true或 false)

•null

•数组(在方括号中) 例如:{“Teachers”:[“roy”,”will”]}

String arrayJson="[1,3,4]";

//转换成json数组(用JSON.paraseArray)
JSONArray arrayJO=JSON.parseArray(arrayJson);

//jsonArray通过下标获取存储的第二个元素
System.out.println("存储的第二个元素是"+arrayJO.get(1));

#输出结果

存储的第二个元素是3

•对象(在花括号中) 例如:{“course”:{“teacher”:”roy”,”courese”:”java”}}

#例1: jsonString值

String jsonString="{\"status\":200,\"msg\":\"查询成功\",\"nickname\":\"测试账号\",\"id\":\"12831\",\"describe\":\"will的测试账号\"}";

//转换成json 对象(用JSON.paraseObject)
JSONObject jsonObject=JSON.parseObject(jsonString);
System.out.println(jsonObject);

//jsonObject通过键的方式获取值
System.out.println("Nickname的值是"+jsonObject.get("nickname"));

#输出结果

# jsonString值输出结果
{"msg":"查询成功","nickname":"测试账号","id":"12831","describe":"will的测试账号","status":200}
Nickname的值是测试账号

#例2:Object值

//将对象的属性写成 键:值的格式。
WashMachine wm=new WashMachine();

//*object或其他格式使用toJSONString方法转成JSON格式的字符串
String s =JSON.toJSONString(wm);
System.out.println(s);

//将字符串转成JSONobject
JSONObject jsonObject= JSON.parseObject(s);
System.out.println(jsonObject);

//获取某个值
Object canUse=jsonObject.get("canUse");

#输出结果

#Object值输出结果
{"age":10,"brand":"米","canUse":false,"capacity":90,"desc":["美观","大气","有烘干功能"],"dog":{"age":0,"ear":"尖尖的耳朵"},"king":"电器","price":0.0,"weight":40}
false
  1. json的使用

#Json的使用

//删
jsonObject.remove("brand");
System.out.println(jsonObject);

//改
jsonObject.replace("king","洗衣机");
System.out.println(jsonObject);

//增
jsonObject.put("volume","38");
System.out.println(jsonObject);

//遍历 json字符串中的不同类型格式所对应的json处理方式
//对象object使用keyset()去遍历
for (String key : jsonObject.keySet()) {

//先获取到Object类型            
    Object value=jsonObject.get(key);

     if(value instanceof String){
            System.out.println(value+"是个字符串");
                //强转数据类型成String
//                String value1=(String)value;

       }else if(value instanceof Boolean){
            System.out.println(value+"是个布尔值");
       }else if(value instanceof BigDecimal){
            System.out.println(value+"是个浮点数");
       }else if(value instanceof Integer){
            System.out.println(value+"是个整数");
       }else if(value instanceof JSONObject){
            System.out.println(value+"是个json对象");
       }else if(value instanceof JSONArray){
            System.out.println(value+"是个json数组");
}
}

#输出结果

//删
{"king":"电器","price":0.0,"weight":40,"dog":{"ear":"尖尖的耳朵","age":0},"age":10,"canUse":false,"capacity":90,"desc":["美观","大气","有烘干功能"]}

//改
{"king":"洗衣机","price":0.0,"weight":40,"dog":{"ear":"尖尖的耳朵","age":0},"age":10,"canUse":false,"capacity":90,"desc":["美观","大气","有烘干功能"]}

//增
{"volume":"38","king":"洗衣机","price":0.0,"weight":40,"dog":{"ear":"尖尖的耳朵","age":0},"age":10,"canUse":false,"capacity":90,"desc":["美观","大气","有烘干功能"]}

//遍历
38是个字符串
洗衣机是个字符串
0.0是个浮点数
40是个整数
{"ear":"尖尖的耳朵","age":0}是个json对象
10是个整数
false是个布尔值
90是个整数
["美观","大气","有烘干功能"]是个json数组
狗对象的耳朵属性是尖尖的耳朵
获取desc数组中的第二个值是有烘干功能
尖尖的耳朵
米是个字符串
  1. Json的解析

方法1:直接解析

 String s="jQuery1102004922028985799365_1676625243870({\"Srcid\":\"5809\",\"ResultCode\":\"0\",\"status\":\"0\",\"QueryID\":\"2479201133\",\"Result\":[{\"DisplayData\":{\"strategy\":{\"tempName\":\"ip\",\"precharge\":\"0\",\"ctplOrPhp\":\"1\"},\"resultData\":{\"tplData\":{\"srcid\":\"5809\",\"resourceid\":\"5809\",\"OriginQuery\":\"163.228.65.13\",\"origipquery\":\"163.228.65.13\",\"query\":\"163.228.65.13\",\"origip\":\"163.228.65.13\",\"location\":\"\\u4e0a\\u6d77\\u5e02 \\u5fae\\u8f6f\\u4e91\",\"userip\":\"\",\"showlamp\":\"1\",\"tplt\":\"ip\",\"titlecont\":\"IP\\u5730\\u5740\\u67e5\\u8be2\",\"realurl\":\"http:\\/\\/www.ip138.com\\/\",\"showLikeShare\":\"1\",\"shareImage\":\"1\",\"data_source\":\"AE\"},\"extData\":{\"tplt\":\"ip\",\"resourceid\":\"5809\",\"OriginQuery\":\"163.228.65.13\"}}},\"ResultURL\":\"http:\\/\\/www.ip138.com\\/\",\"Weight\":\"2\",\"Sort\":\"1\",\"SrcID\":\"5809\",\"ClickNeed\":\"0\",\"SubResult\":[],\"SubResNum\":\"0\",\"ar_passthrough\":[],\"RecoverCacheTime\":\"0\"}],\"data\":[{\"srcid\":\"5809\",\"resourceid\":\"5809\",\"OriginQuery\":\"163.228.65.13\",\"origipquery\":\"163.228.65.13\",\"query\":\"163.228.65.13\",\"origip\":\"163.228.65.13\",\"location\":\"\\u4e0a\\u6d77\\u5e02 \\u5fae\\u8f6f\\u4e91\",\"userip\":\"\",\"showlamp\":\"1\",\"tplt\":\"ip\",\"titlecont\":\"IP\\u5730\\u5740\\u67e5\\u8be2\",\"realurl\":\"http:\\/\\/www.ip138.com\\/\",\"showLikeShare\":\"1\",\"shareImage\":\"1\"}],\"ResultNum\":\"1\"})";

//直接解析
JSONObject tplDataJson=jsonObject.getJSONArray("Result").getJSONObject(0).getJSONObject("DisplayData").getJSONObject("resultData").getJSONObject("tplData");

//用object的keyset去遍历
for (String key : tplDataJson.keySet()) {
      System.out.println(key+"的值是"+tplDataJson.get(key));
}  

#输出结果

resourceid的值是5809
OriginQuery的值是163.228.65.13
origipquery的值是163.228.65.13
query的值是163.228.65.13
shareImage的值是1
origip的值是163.228.65.13
showlamp的值是1
data_source的值是AE
tplt的值是ip
titlecont的值是IP地址查询
srcid的值是5809
realurl的值是http://www.ip138.com/
userip的值是
location的值是上海市 微软云
showLikeShare的值是1

方法2:JsonPath解析

$是表示根目录,.(点)是表示下一层级

 String s="jQuery1102004922028985799365_1676625243870({\"Srcid\":\"5809\",\"ResultCode\":\"0\",\"status\":\"0\",\"QueryID\":\"2479201133\",\"Result\":[{\"DisplayData\":{\"strategy\":{\"tempName\":\"ip\",\"precharge\":\"0\",\"ctplOrPhp\":\"1\"},\"resultData\":{\"tplData\":{\"srcid\":\"5809\",\"resourceid\":\"5809\",\"OriginQuery\":\"163.228.65.13\",\"origipquery\":\"163.228.65.13\",\"query\":\"163.228.65.13\",\"origip\":\"163.228.65.13\",\"location\":\"\\u4e0a\\u6d77\\u5e02 \\u5fae\\u8f6f\\u4e91\",\"userip\":\"\",\"showlamp\":\"1\",\"tplt\":\"ip\",\"titlecont\":\"IP\\u5730\\u5740\\u67e5\\u8be2\",\"realurl\":\"http:\\/\\/www.ip138.com\\/\",\"showLikeShare\":\"1\",\"shareImage\":\"1\",\"data_source\":\"AE\"},\"extData\":{\"tplt\":\"ip\",\"resourceid\":\"5809\",\"OriginQuery\":\"163.228.65.13\"}}},\"ResultURL\":\"http:\\/\\/www.ip138.com\\/\",\"Weight\":\"2\",\"Sort\":\"1\",\"SrcID\":\"5809\",\"ClickNeed\":\"0\",\"SubResult\":[],\"SubResNum\":\"0\",\"ar_passthrough\":[],\"RecoverCacheTime\":\"0\"}],\"data\":[{\"srcid\":\"5809\",\"resourceid\":\"5809\",\"OriginQuery\":\"163.228.65.13\",\"origipquery\":\"163.228.65.13\",\"query\":\"163.228.65.13\",\"origip\":\"163.228.65.13\",\"location\":\"\\u4e0a\\u6d77\\u5e02 \\u5fae\\u8f6f\\u4e91\",\"userip\":\"\",\"showlamp\":\"1\",\"tplt\":\"ip\",\"titlecont\":\"IP\\u5730\\u5740\\u67e5\\u8be2\",\"realurl\":\"http:\\/\\/www.ip138.com\\/\",\"showLikeShare\":\"1\",\"shareImage\":\"1\"}],\"ResultNum\":\"1\"})";


//用Jsonpath解析,然后用toString转成字符串
String tplDataString= JSONPath.read(json, "$.Result.DisplayData.resultData.tplData").toString();
System.out.println(tplDataString);

#输出结果

[{"resourceid":"5809","OriginQuery":"163.228.65.13","origipquery":"163.228.65.13","query":"163.228.65.13","shareImage":"1","origip":"163.228.65.13","showlamp":"1","data_source":"AE","tplt":"ip","titlecont":"IP地址查询","srcid":"5809","realurl":"http://www.ip138.com/","userip":"","location":"上海市 微软云","showLikeShare":"1"}]

4.Json与其他类型的转换

Json转成Map

#Json字符串转成Map
String s="{resourceid=5809, OriginQuery=163.228.65.13, origipquery=163.228.65.13, query=163.228.65.13, shareImage=1, origip=163.228.65.13, showlamp=1, data_source=AE, tplt=ip, titlecont=IP地址查询, srcid=5809, realurl=http://www.ip138.com/, userip=, location=上海市 微软云, showLikeShare=1}";



#方法1
//先把字符串转成object
JsonObject tplDataJson=JSONObject.paraseObject(s);

//然后通过object.keyset()遍历键值加到map中,就实现了map的转化
Map map=new HashMap();
for (String key : tplDataJson.keySet()) {
       map.put(key, tplDataJson.getString(key));
}
System.out.println(map);




#方法2
//直接用JSONObject.paraseObject()方法直接转
HashMap hashMap= JSONObject.parseObject(s,HashMap.class);

System.out.println(hashMap);

#输出结果

#方法1
{resourceid=5809, OriginQuery=163.228.65.13, origipquery=163.228.65.13, query=163.228.65.13, shareImage=1, origip=163.228.65.13, showlamp=1, data_source=AE, tplt=ip, titlecont=IP地址查询, srcid=5809, realurl=http://www.ip138.com/, userip=, location=上海市 微软云, showLikeShare=1}

#方法2
{resourceid=5809, OriginQuery=163.228.65.13, origipquery=163.228.65.13, query=163.228.65.13, shareImage=1, origip=163.228.65.13, showlamp=1, data_source=AE, tplt=ip, titlecont=IP地址查询, srcid=5809, realurl=http://www.ip138.com/, userip=, location=上海市 微软云, showLikeShare=1}

Map转成json

将map拼接为json字符串
//注意Json的格式:键一定有双引号,值不一定,值只有字符串的时候才有双引号
String reJson="{";
//遍历map中的每个键
for (String key : map.keySet()) {
     if(map.get(key) instanceof String) {
         //值是字符串的时候
         //拼接键和值:“键”:"map.get(key)"
         reJson+=String.format("\"%s\":\"%s\",", key, map.get(key));
       }else {
         //值不是字符串的时候,“键”:map.get(key)
     reJson+=String.format("\"%s\":%s,", key, map.get(key));
}
}
reJson=reJson.substring(0,reJson.length()-1)+"}";
System.out.println(reJson);

#输出结果

{"resourceid":"5809","OriginQuery":"163.228.65.13","origipquery":"163.228.65.13","query":"163.228.65.13","shareImage":"1","origip":"163.228.65.13","showlamp":"1","data_source":"AE","tplt":"ip","titlecont":"IP地址查询","srcid":"5809","realurl":"http://www.ip138.com/","userip":"","location":"上海市 微软云","showLikeShare":"1"}

Json转成其他类型

#Json转成JsonObject
JSONObject jsonObject=JSONObject.parseObject(json字符串);

#Json转成字符串
String s= (json字符串).toString();

#对象可以转成json字符串
//将对象的属性写成 键:值的格式。
WashMachine wm=new WashMachine();
//其他格式转成JSON格式的字符串
String s =JSON.toJSONString(wm);

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/4e1cbb42d4.html