【问题标题】:JSON broken when double quotes comes inside the key/value当双引号出现在键/值中时 JSON 被破坏
【发布时间】:2018-12-31 10:42:10
【问题描述】:

样本数据:

{"630":{"TotalLength":"33-3/8" - 36-3/4""},"631":{"Length":"34 37 7/8"}}

我们正面临 JSON 响应中的双引号问题。我们如何将双引号替换为键或值内部的“\””?Java 是开发平台。

【问题讨论】:

  • 您是否拥有发送响应的代码?理想情况下,您应该在那里修复它,而不是试图在接收端逃避它,这是一场噩梦
  • 除了做错事之外,在接收端你不能完全解决这个问题,有些情况会变得模棱两可。
  • @SureshAK 出于对你认为神圣的一切的爱,请停止这种疯狂并修复后端。
  • 告诉客户他们正在向您发送无效的 JSON。让他们来解决这个问题。这是唯一明智的做法。

标签: java json regex


【解决方案1】:

这个答案假设您无法控制创建这个类似 JSON 的字符串。如果你可以控制那部分,那么你应该可以正确地逃到那里。

在这种情况下,由于系统解析不是一个选项,因为它还不是一个有效的 JSON,我所能建议的就是检查各种字符串,看看你是否能找到一个可以应用一些逻辑和转义的模式所有阻止字符串成为有效 JSON 的 "s。

这可能是一个开始的方式:

所有的"s 都需要在{、:、, 和} 中被一个或多个字符包围或在" 和其他 JSON 字符之间没有空格。

因此,如果您使用 Java 解析类似 JSON 的字符串并查找所有 "s,并且当遇到一个时,它们是否与上述任何字符一起(之间有或没有空格) ,你就让它保持原样。如果不是,请将 " 替换为 \"。

请注意,上述方法可能有效,也可能无效,具体取决于相关数据。我的意思是,如果在创建过程中 绝对没有办法 对字符串进行转义,并且如果这些字符串遵循关于未转义 @ 的严格模式,您可能会发现这种方法很有用987654331@s.

【讨论】:

  • 谢谢。这就是我们所面临的确切情况。除了 { , : } 附近的双引号之外,任何用 \" 替换双引号的代码都会对我们有很大帮助。
  • 直到你有一个像a json example {"a":"foobar"} 这样的值然后这将成为一场噩梦
  • 你甚至不应该考虑这样做。解决问题的唯一明智方法是修复发件人。世界上已经有太多糟糕的软件了。
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 2015-11-17
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多