在日常的工作中,json是一种非常常见的数据格式,它可以被理解为键值对存储的。由于最近分析业务的时候,又处理了两种json字符串,今天我就将怎么处理的给大家分享一下,希望能够给学习这方面的朋友一些帮助。再给大家安利个网站https://www.json.cn/,可以分析你得到的数据是否是json格式的。
1.Json套Json
我自己造了条数据,需求是取到内部json中的score。
{"842":{"useranswer":"3407|3408","score":0},"846":{"useranswer":"3414","score":0},"847":{"useranswer":"3499","score":2}}
我们可以看出,它是一个json字符串中,又有三个json字符串。
import com.alibaba.fastjson.JSONObject;
import java.util.Iterator;
import java.util.Set;
public class JsonAndJson {
public static void main(String[] args) {
String jsonStr="{\"842\":{\"useranswer\":\"3407|3408\",\"score\":0},\"846\":{\"useranswer\":\"3414\",\"score\":0},\"847\":{\"useranswer\":\"3499\",\"score\":2}}";
//先将这条数据解析为JSONObject
JSONObject outJson = JSONObject.parseObject(jsonStr);
//因为外部的JSON的key为三位数字的编号,我们需要得到编号,才能得到它对应的内部json
Set<String> jsonSet = outJson.keySet();
Iterator<String> iterator = jsonSet.iterator();
while (iterator.hasNext()){
//通过迭代器可以取到外部json的key
String json = iterator.next();
//取得内部json字符串
String string = outJson.getString(json);
//将内部json字符串解析为object对象
JSONObject inJson = JSONObject.parseObject(string);
//通过score,得到value值
String score = inJson.getString("score");
System.out.println(score);
}
}
}
2.Json数组
这里需求是,拿到除了pid为0的name,并将拿到的拼接起来。
[{"id":50,"name":"Python","pId":0},{"id":77,"name":"web前端","pId":50},{"id":78,"name":"Linux&数据库","pId":50}]
这里就需要进行与第一个Json套Json不同的操作了
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JsonArray {
public static void main(String[] args) {
String jsonArray="[{\"id\":50,\"name\":\"Python\",\"pId\":0},{\"id\":77,\"name\":\"web前端\",\"pId\":50},{\"id\":78,\"name\":\"Linux&数据库\",\"pId\":50}]\n";
StringBuffer sb=new StringBuffer();
//需要使用的JSON的parseArray方法,将jsonArray解析为object类型的数组
JSONArray objects = JSON.parseArray(jsonArray);
for(int i=0;i<objects.size();i++){
//通过数组下标取到object,使用强转转为JSONObject,之后进行操作
JSONObject object = (JSONObject) objects.get(i);
if(!object.getString("pId").equals("0")){
sb.append(object.getString("name")+",") ;
}
}
//这个方法是去掉stringbuffer的最后一位的字符
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
}
}