[Java]接收到一串数据之后怎么取其中的一部分出来?
{"items":{
"ACout_V2":{"time":1673849539719,"value":4},
"State1":{"time":1673849539719,"value":4},
"State2":{"time":1673849539719,"value":5},
"Hz_stable":{"time":1673849539719,"value":3},
"AC_I2":{"time":1673849539719,"value":2},
"temp_C2":{"time":1673849539719,"value":2},
"W2":{"time":1673849539719,"value":4},
"BAT_V2":{"time":1673849539719,"value":123},
"powerstate":{"time":1673849539719,"value":1}
}
}
以第一个数据为例,想提取出名字和值,也就是ACout_V2和4。每次都会接收到很多个数据,怎么提出每一行数据和其对应的值? 将json数据解析成实体再操作吧 jsonObject解析items,然后用keySet便利出key值,同时通过key值取出对应的value就可以了
gcode 发表于 2023-1-16 14:34
将json数据解析成实体再操作吧
用toString()转成final String类型了 正常 就是 吧 json to obj 然后 点点点就好了,如果 是不固定的 就用 JObj 这个玩意 (C# 是这个 java 就不知道了)
这个 csdn 文章 https://blog.csdn.net/qq_37253891/article/details/111475723 本帖最后由 zhangyyue 于 2023-1-16 16:02 编辑
JSONObject json = JSONObject.parseObject(string);//string转jsonobject
JSONObject items= (JSONObject)json.get("items");//获取jsonobject对象items
JSONObject Acout_V2 = (JSONObject)items.get("ACout_V2");//获取jsonobject对象ACout_V2
(int)Acout_V2.get("value");//获取4
Iterator it = items.keys();
while (it.hasNext()) {
String key = (String) it.next();//获取ACout_V2、State1.。。。
JSONObject tmp = items.getJSONObject(key);//根据key获取jaonobject
Int value = tmp .getInt("value");//获取value的值
}
Java中的String转Json,也有其它的包可以用,比如fastjson,Gson zhangyyue 发表于 2023-1-16 15:48
JSONObject json = JSONObject.parseObject(string);//string转jsonobject
JSONObject items= (JSONObje ...
提示Cannot resolve method 'parseObject' in 'JSONObject'咋办 可以导入fastjson
JSONObject parse = JSONObject.parse(data);
JSONObject item = parse.getJSONObject("item");
Iterator<String> iterator = item.keySet().iterator();
while (iterator.hasNext()) {
String next = iterator.next();
int value = item.getJSONObject(next).getIntValue("value");
break;
} 和楼上一样,导包代码都给你贴出来,再不行也没招了
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.Optional;
public class TestDemo {
public static void main(String[] args) {
String str = "{ \"items\": { \"ACout_V2\": { \"time\": 1673849539719, \"value\": 4 }, \"State1\": { \"time\": 1673849539719, \"value\": 4 }, \"State2\": { \"time\": 1673849539719, \"value\": 5 }, \"Hz_stable\": { \"time\": 1673849539719, \"value\": 3 }, \"AC_I2\": { \"time\": 1673849539719, \"value\": 2 }, \"temp_C2\": { \"time\": 1673849539719, \"value\": 2 }, \"W2\": { \"time\": 1673849539719, \"value\": 4 }, \"BAT_V2\": { \"time\": 1673849539719, \"value\": 123 }, \"powerstate\": { \"time\": 1673849539719, \"value\": 1 } } }";
JSONObject jsonObject = JSON.parseObject(str);
JSONObject items = jsonObject.getJSONObject("items");
for (String key : items.keySet()) {
System.out.println("key: "+ key + ", value: " + Optional.ofNullable(items.getJSONObject(key)).map(e->e.getString("value")).orElse(""));
}
}
}
Thy 发表于 2023-1-16 16:28
和楼上一样,导包代码都给你贴出来,再不行也没招了
import com.alibaba.fastjson.JSON;
终于可以了,如果用Java原生的方法可以吗
页:
[1]
2