基督山 发表于 2023-1-16 14:23

[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。每次都会接收到很多个数据,怎么提出每一行数据和其对应的值?

gcode 发表于 2023-1-16 14:34

将json数据解析成实体再操作吧

dabobo2111 发表于 2023-1-16 14:44

jsonObject解析items,然后用keySet便利出key值,同时通过key值取出对应的value就可以了

基督山 发表于 2023-1-16 14:44

gcode 发表于 2023-1-16 14:34
将json数据解析成实体再操作吧

用toString()转成final String类型了

cxx313120919 发表于 2023-1-16 14:45

正常 就是 吧 json to obj 然后 点点点就好了,如果 是不固定的 就用 JObj 这个玩意 (C# 是这个 java 就不知道了)
这个 csdn 文章 https://blog.csdn.net/qq_37253891/article/details/111475723

zhangyyue 发表于 2023-1-16 15:48

本帖最后由 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

基督山 发表于 2023-1-16 16:11

zhangyyue 发表于 2023-1-16 15:48
JSONObject json = JSONObject.parseObject(string);//string转jsonobject
JSONObject items= (JSONObje ...

提示Cannot resolve method 'parseObject' in 'JSONObject'咋办

1039468583 发表于 2023-1-16 16:21

可以导入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;
      }

Thy 发表于 2023-1-16 16:28

和楼上一样,导包代码都给你贴出来,再不行也没招了

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

    }
}


基督山 发表于 2023-1-16 16:39

Thy 发表于 2023-1-16 16:28
和楼上一样,导包代码都给你贴出来,再不行也没招了

import com.alibaba.fastjson.JSON;


终于可以了,如果用Java原生的方法可以吗
页: [1] 2
查看完整版本: [Java]接收到一串数据之后怎么取其中的一部分出来?