【问题标题】:not able to create Java Object from Json having double quote in value无法从具有双引号的 Json 创建 Java 对象
【发布时间】:2020-02-19 11:26:13
【问题描述】:

我有同样的疑问。我的 JSON 如下。

String json="{ "credentials": { "password": "Password"123", "emailAddress": "skylineadmin@gmail.com" }, "clientTimeMs": 1582006455421, "callerRole": 0 }"

key = password 和 value 是 "Password"123" 它包含 "(双引号)。我无法从这个 json 创建一个 java 对象,因为它已失效。

Gson gson = new Gson(); 
gson.fromJson(json, PasswordResetDetails.java);

上面的代码 sn-p 不工作。

【问题讨论】:

标签: java json gson


【解决方案1】:

如果您这样做是为了学习/测试目的,您需要做的就是使用:转义双引号:

String json="{ "credentials": { "password": "Password\"123", "emailAddress": "skylineadmin@gmail.com" }, "clientTimeMs": 1582006455421, "callerRole": 0 }"

如果这是一个真实的场景,那么我建议更改源以确保它提供有效的 JSON。

有无数种方法可以检查您的 JSON 是否有效(JSON linting),这里是 one

【讨论】:

  • 它的真实场景。从重置密码屏幕用户可以提供任何密码。假设密码“123 这个带双引号的密码字符串与我上面提到的 json 中的其他详细信息一起出现在服务器端。所以有没有通用的解决方案。因为用户可以提供任何密码。双引号失败创建 java 对象。即使我在执行此 java 行字符串后使用 escape chanracter 就像 "password": "Password"123"...再次无法使用 gson.fromJson 创建 java 对象...
  • 那么我的建议是在源上修复此行为。如果输入未经过过滤,则意味着您还面临着其他类型的攻击的风险。
猜你喜欢
  • 2020-05-26
  • 2015-07-06
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多