【问题标题】:fromJson returing NULL if input JSON contains double quotes如果输入 JSON 包含双引号,则 fromJson 返回 NULL
【发布时间】:2018-04-16 18:35:26
【问题描述】:

我正在尝试将 JSON 数据存储到 POJO 类中,然后将该类存储到 Firebase 中。如果我使用 str1 作为 fromJson 的输入,则正确填充 pojo 类,但如果使用 str2,则 fromJson 返回 null。 问题是两个字符串(str1 或 str2)中的哪一个是正确的? 我的原始数据是 CSV 格式,我使用其中一个在线转换器将 CSV 文件转换为 JSON 格式。数据与str2中显示的格式相同。

String str1 =  "{\"code\":602,\"desc\":\"somedescription\"}"; 
String str2 =  "{"code":602,"desc":"somedesc"}";
myGson = new Gson();
codeDescMast = myGson.fromJson(str1,CodeDescMast.class);

这是我的 POJO 课程。

public class CodeDescMast {
   int code;
   String desc;

public CodeDescMast() { }
public CodeDescMast(int code, String desc) {
    this.code = code;
    this.desc = desc;
}

public int getCode() {
    return code;
}

public void setCode(int code) {
    this.code = code;
}

public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

}

问候 贾娜

【问题讨论】:

  • \" 是文本内字符串文字引号的转义字符,第二个选项不可通过代码编译,当从 txt 文件加载时,字符串无论如何都会将其作为转义,你需要显示文件的内容以及如何将其加载到内存中
  • str1 是正确的,你应该在 Java 中转义字符串中的双引号。当您的代码中有 String str2 = "{"code":602,"desc":"somedesc"}"; 时,您的代码真的编译了吗?
  • @Marcos 我有一个 CSV 值数据集。使用在线服务,我将 CSV 转换为 JSON。该服务的输出格式是类似 str2 的字符串。以下是我读取JSON文件的方式 InputStream is = context.getAssets().open("samp.json") ; int size = is.available() ;字节[] 缓冲区 = 新字节[大小] ; is.read(缓冲区); is.close(); codeDescJSON = new String(buffer,"UTF-8") ;变量 codeDescJSON 是我传递给 fromJson() 方法的 str2 。问题是“应该转义 JSON 中的双引号还是可选的?”
  • @Sony 没有崩溃但代码和 desc 包含空值
  • 不应该在从文本流中读取的时候转义,需要调试看看是否加载正确

标签: android double-quotes


【解决方案1】:

Gson 正在正确处理 str1,因为它在 java 中的语法是正确的。

然而 str2 不正确,实际上它也不应该编译。

String str1 =  "{\"code\":602,\"desc\":\"somedescription\"}"; // Correct Way
String str2 =  "{"code":602,"desc":"somedesc"}"; // Incorrect Way

我们可以使用 \ 字符来表示我们想要包含一个特殊字符,并且下一个字符应该被区别对待。 \" 表示引号字符,而不是字符串的终止符。

请参阅thread 了解此类实现。

【讨论】:

  • 在 Java 中双引号需要转义,而在其他情况下则不需要转义。我的理解正确吗?
  • 如果您觉得我的回答有用,那么您可以将其标记为解决方案并点赞,这样它也可以帮助其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
相关资源
最近更新 更多