java交换kv的值_java如何处理奇怪的json,提取想要的kv对

============================

math?formula=%5Ccolor%7B%234285f4%7D%7BK%7D%5Ccolor%7B%23ea4335%7D%7Ba%7D%5Ccolor%7B%23fbbc05%7D%7Br%7D%5Ccolor%7B%234285f4%7D%7By%7D%5Ccolor%7B%2334a853%7D%7B%E5%BC%80%7D%5Ccolor%7B%23ea4335%7D%7B%E6%BA%90%7D

============================

[{"keywordFile":"南邮","keyword":[{"content":"教授"},{"content":"特聘"}]},{"keywordFile":"真的","keyword":[{"content":"如果"},{"content":"确定"}]}]

这是一条奇怪的json,我们想要分拣出来干净的kv对,那么现在把这整个json字符串看成一个JSONArray,里面有两条JSONObject

第一条

{"keywordFile":"南邮","keyword":[{"content":"教授"},{"content":"特聘"}]}

第二条

{"keywordFile":"真的","keyword":[{"content":"如果"},{"content":"确定"}]}

而这条 JSONObject都一样,除了一个明显的kv对("keywordFile":"南邮")外,还有一个一个JSONArray,这个JSONArray里也是有两条JSONObject

那么我们的思路就很明显,遍历分拣。

具体这样实现

首先导入一个json的jar包

net.sf.json-lib

json-lib

2.4

jdk15

下面先把字符串通过 JSONArray.fromObject转换为JSONArray,

遍历大JSONArray分拣出JSONObject,取出简单的kv对keywordFile,

再把复杂的keyword也转换成JSONArray,然后对小JSONArray进行遍历分拣。

简单来说就是

JSONArray(大)=>JSONObject(大),

若JSONObject(大)是JSONArray(小),

则JSONObject(大)=>JSONArray(小),

再JSONArray(小)=>JSONObject(小)

String keywords="[{\"keywordFile\":\"南邮\",\"keyword\":[{\"content\":\"教授\"},{\"content\":\"特聘\"}]}, {\"keywordFile\":\"真的\",\"keyword\":[{\"content\":\"如果\"},{\"content\":\"确定\"}]}]";

JSONArray json = JSONArray.fromObject(keywords);

if (json.size()>0) {

System.out.println("开始分拣");

for (int i= 0; i< json.size(); i++) {

JSONObject job = json.getJSONObject(i);

String keywordFile = (String) job.get("keywordFile");

System.out.println(keywordFile + "============================");

JSONArray jsonArray = (JSONArray) job.get("keyword");

if (jsonArray.size() > 0) {

System.out.println("开始插入检索词");

for (int j= 0; j < jsonArray.size(); j++) {

JSONObject jsonObject = jsonArray.getJSONObject(j);

System.out.println(jsonObject.get("content"));

}

}

}}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值