吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1159|回复: 19
收起左侧

[求助] [Java]接收到一串数据之后怎么取其中的一部分出来?

[复制链接]
基督山 发表于 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
[Java] 纯文本查看 复制代码
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(""));
        }

    }
}

微信截图_20230116162658.png

免费评分

参与人数 1热心值 +1 收起 理由
基督山 + 1 我很赞同!

查看全部评分

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

import com.alibaba.fastjson.JSON;

终于可以了,如果用Java原生的方法可以吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表