当前位置: 首页 > 知识库问答 >
问题:

将javax响应类型中包含的值转换为要格式化为json数组的列表

傅彬
2023-03-14

因此,对于你们中的一些人来说,我的问题可能有点愚蠢,但是我正在查询一些必须作为响应返回的数据,然后我必须在我的应用程序的前端使用该数据的一部分来使用AngularJS和nvD3图表来绘制它。要正确设置绘图工具的数据格式,我必须将此数据转换为正确的 json 格式。我找不到直接的方法从返回的响应中提取我需要的数字。我只需要获取我需要的值,并将它们转换为列表,然后解析为json数组。以下是我为此所做的工作,它的工作原理,给了我我正在寻找的列表......

if (tableState.getIdentifier().getProperty().equals("backupSize")){
        Response test4 = timeSeriesQuery.queryData("backup.data.size,", "", "1y-ago", "25", "desc");
        String test5 = test4.getEntity().toString();
        int test6 = test5.indexOf("value");
        int charIndexStart = test6 + 9;
        int charIndexEnd = test5.indexOf(",", test6);
        String test7 = test5.substring(charIndexStart, charIndexEnd);
        int charIndexStart2 = test5.indexOf(",", charIndexEnd);
        int charIndexEnd2 = test5.indexOf(",", charIndexStart2 + 2);
        String test9 = test5.substring(charIndexStart2 + 1, charIndexEnd2);
        long test8 = Long.parseLong(test7);
        long test10 = Long.parseLong(test9);
        List<Long> graphs = new ArrayList<>();
        graphs.add(test8);
        graphs.add(test10);
        List<List<Long>> graphs2 = new ArrayList<List<Long>>();
        graphs2.add(graphs);
        for(int i=1, charEnd = charIndexEnd2; i<24; i++){
            int nextCharStart = test5.indexOf("}", charEnd) + 2;
            int nextCharEnd = test5.indexOf(",", nextCharStart);
            String test11 = test5.substring(nextCharStart + 1, nextCharEnd);
            int nextCharStart2 = test5.indexOf(",", nextCharEnd) + 1;
            int nextCharEnd2 = test5.indexOf(",", nextCharStart2 + 2);
            String test13 = test5.substring(nextCharStart2, nextCharEnd2);
            long test12 = Long.parseLong(test11);
            long test14 = Long.parseLong(test13);
            List<Long> graphs3 = new ArrayList<>();
            graphs3.add(test12);
            graphs3.add(test14);
            graphs2.add(graphs3);
            charEnd = test5.indexOf("}", nextCharEnd2);
        } return graphs2;

下面是测试5的结果:

xxx.xx.xxxxxx.entity.timeseries.datapoints.queryresponse.DatapointsResponse@2be02a0c[start=,end=,tags={xxx.xx.xxxxxx.entity.timeseries.datapoints.queryresponse.Tag@1600cd19[name=backup.data.size,结果={xxx.xx.xxxxxx.entity.timeseries.datapoints.queryresponse.Results@2b8a61bd[组={xxx.xx.xxxxxx.entity.timeseries.datapoints.queryresponse.Group@61540dbc[name=type,type=number]},属性=xxx.xx.xxxxxx.entity.util.map.Map@4b4eebd0[],值={1487620485896973956,3},{1487620454999973806,3{,{14876 20424690956617,3}.,{14876 20397181938677,3}96441832150,3},{1487620168141819563,3}.,{14876 20142079787264,3}.{148762011 582778726,3},{1487620091991787264,3},{1487620067230787264,3},{1487620042333787264,3},{14876 2001850877264,3+,{1487619994967787264,3{14876 19973549778740,3}.,{1487.619950069770205,3}.{1487619926850749106,3}:{14876199902486740729,3},1487619877298728184,3}:{1487619851449719666,3}]},统计信息=xxx.xx.xxxxxx.entity.timeseries.datapoints.queryresponse.Stats@5bb68fa5[rawCount=25]]}]

和返回的列表:

[[1487620485896, 973956], [1487620454999, 973806], [1487620424690, 956617], [1487620397181, 938677], [1487620368825, 934494], [1487620339219, 926125], [1487620309050, 917753], [1487620279239, 909384], [1487620251381, 872864], [1487620222724, 846518], [1487620196441, 832150], [1487620168141, 819563], [1487620142079, 787264], [1487620115827, 787264], [1487620091991, 787264], [1487620067230, 787264], [1487620042333, 787264], [1487620018508, 787264], [1487619994967, 787264], [1487619973549, 778740], [1487619950069, 770205], [1487619926850, 749106], [1487619902486, 740729], [1487619877298, 728184]]

然后我可以把它塞进json(至少我是这么认为的!还没到那一步)。但是这段代码看起来很荒谬,很脆弱,而且不是解决这个问题的正确方法。

有没有人有更好的方法从响应中提取数据点并将其转换为json数组或至少嵌套列表?

感谢任何阅读的人,如果我能提供更多的信息,请告诉我。

共有1个答案

邢璞
2023-03-14

当我们只需要查询中的几个值时,检索它们的最佳方法是使用resultSet进行查询,并使用其强大的元数据:

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
 ResultSetMetaData rsmd = rs.getMetaData();
 String name = rsmd.getColumnName(1);

从这里拍的

因此,您可以通过使用元数据属性来获取所需的列,然后最好的方法是使用DTO对象来存储每一行

因此,基本的想法是,您可以从检索到的数据或仅从数据库中当前需要的数据构建一个对象,并且可以使用通用的getter和setter来访问所有字段

但是,在收集数据时,您通常会使用循环,因为您需要迭代 resultSet 值,要求输入列的名称,并在一致时保留其值。

希望能有所帮助

 类似资料:
  • 使用Gson库,如何将JSON字符串转换为自定义类的?基本上,是由我的Android应用程序创建的不同类型的日志实现的接口--SMS日志、呼叫日志、数据日志--而这个是所有这些日志的集合。我在第6行总是发现一个错误。 似乎编译器不明白我指的是类型化的。我该怎么办?

  • 我是格森的新手。我需要将下面的JSON响应转换成一个列表。 JSON响应: 我有一门课要教数据 账户JAVA 当我对我的班级做出回应时,我得到了: 现在我需要将这两个值放入

  • 问题内容: 我想在UDP协议中使用字节格式发送数据时遇到问题,问题是当我尝试使用json对象类型创建数据时,无法获取数据的字节格式,这是我的示例代码: 我知道我的问题,但我找不到如何将json对象转换为字节,有什么建议吗? 问题答案: 获取字符串的字节:

  • null 这是很好的,因为我可以确定我的API请求是否成功。 但是: 由于JSend格式有它自己的东西,它在响应时也有一个小的状态指示器,如下所示: 我是否应该坚持手动解析并使用而不是我的模型 对于类型paramter? 因为这样,我可以使用并将字符串转换为JSON,然后我可以手动解析模型,就像为它们编写解析器一样。

  • 我需要将其转换为以下格式: 类型的数量可以改变(例如,可以只有A和B)。有人能帮我吗?我使用这个组件在网站https://js.devexpress.com/demos/widgetsgallery/demo/datagrid/simplearray/angular/light/上显示数据

  • 问题内容: 我想将数组转换为JSON格式。这是我的来源: 这是我想要的期望结果: 首先,我将字节转换为字符串: 但是当我尝试加载到JSON时: 我收到此错误: 问题答案: 您的对象 几乎 是JSON,但是它使用单引号而不是双引号,并且它必须是字符串。因此,解决该问题的一种方法是解码to 并替换引号。另一种选择是使用; 有关详情,请参见下文。如果要打印结果或将其作为有效JSON保存到文件中,则可以将