读取带空格的字符串时获取com.google.gson.stream.MalformedJsonException

时间:2018-07-15 16:51:41

标签: java android firebase google-cloud-firestore

我正在使用Cloud Firestore存储数据。当我尝试读取字符串中带有空格的数据时,出现以下错误消息:

    java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 79
    at com.google.gson.Gson.fromJson(Gson.java:769)
    at POS.Firebase.readCounts(Firebase.java:47)
    at POS.Main.main(Main.java:52)
    ... 11 more
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 79
    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1298)
    at com.google.gson.stream.JsonReader.nextInObject(JsonReader.java:722)
    at com.google.gson.stream.JsonReader.peek(JsonReader.java:382)
    at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:349)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:169)
    at com.google.gson.Gson.fromJson(Gson.java:755)
    ... 13 more

从firebase获取数据的代码是

for (DocumentSnapshot documentSnapshot : collection.get().get().getDocuments()) {
            JsonReader reader = new JsonReader(new StringReader(String.valueOf(documentSnapshot.getData())));
            reader.setLenient(true);
            Item item = new Gson().fromJson(reader, Item.class);
            Arrays.itemArrayList.add(item);
        }

当我输入数据时,有没有一种方法可以存储数据而不添加引号 Data in database

2 个答案:

答案 0 :(得分:0)

documentSnapshot.getData()的返回类型为Map。要将Map转换为json对象,只需将值传递给JSONObect构造函数,如下所示

 JSONObject jsonObject = new JSONObject(map);

现在您将要面对的问题是Map的键是字符串,但是值是Object,它将在您的JSONObject中打印一些随机值。

所以最好的方法是迭代地图,获取值并从中创建对象。

答案 1 :(得分:0)

得到此错误不是,是因为您在字符串中使用了“空格”,而是因为使用了JSON。正如Doug Stevenson所说,Firestore不会将数据存储为JSON。您应该根据存储的数据类型来获取数据。

根据DocumentSnapshot文档,您有许多获取数据的选项。您甚至可以使用toObject(Class valueType)方法根据自定义数据类型获取数据。

  

返回转换为POJO的文档的内容,如果文档不存在,则返回null。

请注意,您可以在Firestore中添加一个“空格”,甚至是一个空String作为String类型的属性的值。两种操作都允许。