Java中将{“result“:true,“eId“:“xxx“}键值对数据转化为Map

Java中将{"result":true,"eId":"xxx"}键值对数据转化为Map


问题描述:Java中从Buffer里面读取的数据格式为{"result":true,"eId":"xxx"},想读取eId对应的值,所以想着把这类数据转化为Map<String,String>类型的对象,会好取值一些。

推荐字符串处理包Google guava工具类的介绍和使用

探索过程:

1、想着应该提简单的,不就是JSON数据转Map?觉得网上会有很多现成的。有些推荐使用JSON或者Gson转化的,但是我尝试之后发现都无法实现转化,原因大概是因为希望转化的数据格式并不符合Java中的JSON数据格式(如下图所示,参考链接http://www.51gjie.com/java/750.html)。

//定义JSON字符串
String JsonStr = "{\"id\": 2," + 
                " \"title\": \"json title\", " + 
                "\"config\": {" +
                    "\"width\": 34," +
                    "\"height\": 35," +
                "}, \"data\": [" +
                    "\"JAVA\", \"JavaScript\", \"PHP\"" +
                "]}"

2、网上还有另一种答案就是使用Google的Guava库,里面有很多字符串处理和转化的方法。

 <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version>
        </dependency>

 在pom.xml添加如上maven依赖,其他方式可以可以自行百度。

使用指南可以参考https://www.cnblogs.com/fleekfan/p/11572232.html。

官网参考链接https://guava.dev/releases/snapshot/api/docs/com/google/common/base/Splitter.html#withKeyValueSeparator-char-。

下面附上我的部分代码片段

             String output = "";
            String output1 = "";
            System.out.println("Output from Server: ");
//            处理了一上午,小丑竟是我自己,为什么下面这种方法读取到的output在while循环之后是空的呢?
            while ((output = responseBuffer.readLine()) != null) {
//跳出while后output为空,因为跳出循环的条件就是output为空,所以需要定义另外output1提前接收。
//因为这个原因,我试了半天JSON、GSON和guava都不行。。。。。。,还一直没注意到是这里的问题
                output1 = output.substring(1,output.length()-1);
                output = output;
                System.out.println(output);
            }
            System.out.println("-------------"+output1);

            output1 = output1.replace("\"","");  //去除掉键值对数据中多余的双引号,不然“eId”整//体才是key,去掉以后eid就是key了
            System.out.println("去除双引号的"+output1);

            Map<String,String> response = new HashMap<>();
//下面这个就是guava
            response = Splitter.on(",").withKeyValueSeparator(":").split(output1);
            System.out.println("===="+response);
            System.out.println("===="+response.get("eId"));

哎,也是无语,中途一直没有意识到output的问题,以为别人给的方法不行。所以就是再不济,还有最简陋的方式,就是自己使用split函数来提取eId对应的值,如下代码所示。还是要注意对字符串的处理,包括去掉量变的括号{},以及多余的双引号等“”。

         String[] res = output1.split(",");
            String success = res[0].split(":")[1];
            if(success.equals("false")){
                map.put("reason","人脸识别失败");
            }
            else{
                 eId = res[1].split(":")[1];
                System.out.println("获取的结果"+eId);
            }

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值