【问题标题】:Convert Json to Google Datastore Entity将 Json 转换为 Google 数据存储实体
【发布时间】:2021-09-11 03:43:10
【问题描述】:

我一直在 android studio 上开发 Java 应用程序,我想提取我存储在 google 数据存储区中的几个实体。实体存储为List<Entity> 并转换为 Json。在 Android 工作室中,我现在正在努力将字符串化实体转换回其原始版本。这是我的 Json 响应示例:

[{"properties":
              {"name":
                     {"valueType":"STRING", "values":"nameOfEntity", ...},
               "date":
                     {"valueType":"STRING", "values":"dateOfEntity", ...},
               ...
              }
}]

我只需要每个属性的“值”。

有没有办法将响应转换回带有 json 的数据存储实体?

编辑: 我的代码的 sn-p

 public void onResponse(Call<ResponseBody> call, Response<ResponseBody> r) {
            if(r.isSuccessful()) {
                try {
                    for (int i = 0; i < 5; i++) {
                        List<String> values = null;
                        Gson gson = new Gson();
                        JSONArray array = new JSONArray(r.body().string());

                        JSONObject obj = array.getJSONObject(i);
                        String properties = obj.getString("properties");

                        JSONArray array2 = new JSONArray(properties);

                        for (int j = 0; j < array2.length(); j++) {
                            JSONObject obj2 = array2.getJSONObject(j);
                            values.add(obj2.getString("values"));
                        }

                        Toast.makeText(getActivity(), "FINISHED", Toast.LENGTH_SHORT).show();
                    }
                } catch (IOException | JSONException e) {
                    e.printStackTrace();
                }
            }

【问题讨论】:

  • 您使用的是什么库/版本?您可以在将对象转换为 JSON 时发布一个 sn-p 吗?我建议在您的问题中添加详细信息以使其更具重现性。见stackoverflow.com/help/minimal-reproducible-example
  • 我正在使用 retrofit2 和 Java 1.8 和 sdk 30,我将使用代码片段编辑我的帖子!

标签: java json android-studio google-cloud-datastore


【解决方案1】:

在这种情况下,您需要使用 Java 反序列化库(如 gson)将 JSON 字符串转换为等效的 Java 对象。

这是可能的,但这样做可能是一个漫长的过程。实体对象由许多其他对象组成,您必须重写每个对象,因为云客户端库目前不支持 Android。也有关于反序列化的教程。以link 为例。

最后,我建议您查看对象的整个结构,以便开始使用。查看数据存储对象Entity

【讨论】:

  • 好的,我明白了,所以这里的问题是泛型类型?由于云库不支持 android,我是否应该尝试以其他方式将实体发送到数据存储区(而不是 List,我可以使用 List 并在之后取消实现)?
  • 我找不到任何关于List&lt;EventData&gt; 的信息,所以很遗憾,我无法回答您的这部分问题。但是,可以将 JSON 反序列化为通用列表。常用的反序列化库是 Gson 和 Jackson。请查看此链接stackoverflow.com/questions/42947213/…
  • 我设法通过循环遍历每个值并获取我想要的值来做到这一点。为了减少代码,我使用了数据存储实体的 getProperties().values() 方法,并且只发送属性的值而不是整个东西。
猜你喜欢
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多