Java + BigQuerie 如何获取正确的 JSON 而不是一些 FieldValues 列表?

Posted

技术标签:

【中文标题】Java + BigQuerie 如何获取正确的 JSON 而不是一些 FieldValues 列表?【英文标题】:Java + BigQuerie how to get proper JSON instead of some list of FieldValues? 【发布时间】:2016-11-30 07:41:57 【问题描述】:

我是 BigQuery 的新手,正在尝试从测试表中获取一些值。共有三列:ID、DateTime 和 String。填充了一些行,当前时间以毫秒为 ID,当前时间为 UTC,当前时间以毫秒为字符串,因此该行如下所示:

1480419755489 | 2016-11-29 11:42:35 UTC |来源14804197554881

BigQuery 控制台中的 Json 如下所示:

"ID": "1480419755489", "日期时间": "2016-11-29 11:42:35 UTC", “字符串”:“来源 14804197554881”

一切似乎都很好。但是在 Java 中,当我尝试获取这一行时,我遇到了一些不好的情况,看起来像:

[FieldValueattribute=PRIMITIVE, value=1480419755489, FieldValueattribute=PRIMITIVE, value=1.480419755E9, FieldValueattribute=PRIMITIVE, value=Source 14804197554881]

注意输出中没有列名,只有一些属性; DateTime 以 X.YYEZ 的形式显示为毫秒。可以以某种方式解决这个问题,或者这就是它的意图显示方式吗?我是否需要解析响应中的每个值,并且对于我得到的每一行,我必须创建新的 Json 对象并向其写入值?或者我应该创建一个像 MyRow 这样具有正确数据类型的类,并且查询的结果会以某种方式将正确的值写入我的类的对象?

【问题讨论】:

【参考方案1】:

将回答我自己的问题。这些 FieldValues 是地图。所以我用了这样的东西: 使用所需的数据类型创建了我的类 MyRow。 像这样解析我从 BigQuery 获得的每一行:

MyRow myRow = new MyRow();
myRow.setID(Integer.parseInt(row.get(0).stringValue()));
myRow.setDateTime(new Date(new BigDecimal(row.get(1).stringValue()).longValue()));
myRow.setString(row.get(2).stringValue());

看看我得到了什么:

Gson gson = new Gson();
System.out.println(gson.toJson(myRow));

【讨论】:

以上是关于Java + BigQuerie 如何获取正确的 JSON 而不是一些 FieldValues 列表?的主要内容,如果未能解决你的问题,请参考以下文章

Java 中通过 key 获取锁的正确方式

Java 中通过 key 获取锁的正确方式

Java 中通过 key 获取锁的正确方式

知道一个窗体的句柄,如何获取这个窗体

linux 中的cksum如何通过java实现

java代码实现从路径字符串中获取文件名称