weixin_46314775 2023-01-10 20:20 采纳率: 28.6%
浏览 30
已结题

如何解析数组字符串,

"tx":"[["49","54","2.10","12"],["3","2","2.10","1"]]"这种结构如何解析呢,我试了很多办法都不行
我想要的是结果是这样:
String xx1=49
String xx2=54
String xx3=2.10
String xx4=12
!!!

  • 写回答

4条回答 默认 最新

  • m0_54204465 2023-01-10 20:43
    关注

    在 Java 中,可以使用 JSON 库来解析字符串数组。Jackson 是一个非常常用的 JSON 库,可以很方便地将 JSON 字符串转换为 Java 对象。

    首先需要安装 Jackson 的依赖,如下:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.12.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.0</version>
    </dependency>
    
    

    然后可以通过如下代码来解析 JSON 字符串数组

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    String jsonString = "{\"tx\":[[\"49\",\"54\",\"2.10\",\"12\"],[\"3\",\"2\",\"2.10\",\"1\"]]}";
    ObjectMapper mapper = new ObjectMapper();
    JsonNode rootNode = mapper.readTree(jsonString);
    JsonNode txNode = rootNode.path("tx");
    
    for (int i = 0; i < txNode.size(); i++) {
        JsonNode innerNode = txNode.get(i);
        String xx1 = innerNode.get(0).asText();
        String xx2 = innerNode.get(1).asText();
        String xx3 = innerNode.get(2).asText();
        String xx4 = innerNode.get(3).asText();
        System.out.println(xx1+","+xx2+","+xx3+","+xx4);
    }
    
    

    第一行是JSON字符串,后面的代码中通过ObjectMapper将字符串解析为 JsonNode, 然后通过循环遍历 txNode 获取每个内部节点,使用innerNode.get(i).asText()来获取对应的值,最后打印出来

    PS:如果需要更具体的数据类型转换可以通过innerNode.get(i).asDouble(), innerNode.get(i).asInt()等函数来进行转换,转换为对应的数字类型。

    另外, 如果你需要使用更高级的 JSON 功能,可以使用 Gson 库,它支持将 JSON 字符串转换为 Java 对象,并支持自动将对象转换为 JSON 字符串。

    首先需要添加 gson 依赖

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.6</version>
    </dependency>
    
    

    然后你可以使用 Gson 来将 JSON 字符串转换为 Java 对象

    import com.google.gson.Gson;
    
    String jsonString = "{\"tx\":[[\"49\",\"54\",\"2.10\",\"12\"],[\"3\",\"2\",\"2.10\",\"1\"]]}";
    Gson gson = new Gson();
    JsonNode jsonNode = gson.fromJson(jsonString, JsonNode.class);
    JsonNode txNode = jsonNode.get("tx");
    
    for (int i = 0; i < txNode.size(); i++) {
        JsonNode innerNode = txNode.get(i);
        String xx1 = innerNode.get(0).asText();
        String xx2 = innerNode.get(1).asText();
        String xx3 = innerNode.get(2).asText();
        String xx4 = innerNode.get(3).asText();
        System.out.println(xx1+","+xx2+","+xx3+","+xx4);
    }
    
    

    解析方法类似,只是使用 Gson来解析Json字符串。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 1月10日

悬赏问题

  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误