【问题标题】:Easy way to convert string to JSON object? [duplicate]将字符串转换为 JSON 对象的简单方法? [复制]
【发布时间】:2013-08-12 16:46:54
【问题描述】:

有没有一种更简单的方法可以将 json 字符串文字转换为 json 对象,而不是手动编码“\”。

示例数据,但我的数据比这大得多。

{"phonetype":"N95","cat":"WP"}

//Easier way? Equivalent of JSON.Stringify({"phonetype":"N95","cat":"WP"})?
JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); 

【问题讨论】:

  • 我认为没有办法解决这个问题。 Java 不支持选择单引号或双引号将字符串括起来,就像 JavaScript 等其他语言一样。如果 JSON 太大而无法转义引号,请从文件中加载它。
  • @BrianRoach 我认为这些是相似但不可否认的不同问题,这个问题的解决方案可能涉及也可能不涉及搅拌转义技术。
  • @gbtimmon 他们真的不是。他需要在字符串文字中使用双引号,在 Java 中无法转义它们。您发布的答案不是有效的 JSON。

标签: java json jackson


【解决方案1】:

你的最终目标是什么?为什么字符串需要直接在Java文件中?为什么,就此而言,引号转义是有问题的?对我来说,您似乎有一个不必要的约束(例如“此字符串需要内联”或“这根本需要是一个字符串”),如果您删除它,将更容易使用。

  1. 在 Java 之外存储复杂的 JSON

    对我来说,这几乎可以肯定是你最好的选择。您将您的数据描述为“比 [{"phonetype":"N95","cat":"WP"}] 大得多”,这意味着它是数据,而不是代码,您将有更好的时间将它们分开。在需要时加载文件,使用任何你想要的工具,你就可以了。

  2. 将您的设置存储为 JSON 以外的其他内容

    JSON 对很多事情都很好,但是如果您需要 JSON 内联并且不能使用外部文件,这表明您的 Java 和 JSON 之间存在一些非常紧密的耦合,这是没有意义的。您最好将类型安全的常量存储或以其他方式将这些数据保存在“真正的”Java 中,而不是保存在您解析的字符串中。

  3. 不用担心逃跑

    我认为这不适用于您的情况,但是如果您有少量的 JSON 并且您确实想要内联和 JSON,那么只需将其放入并转义几个引号即可。如果由于 a) 数据定期更改或 b) 数据庞大且复杂而无法在线使用,那么此选项似乎有问题,那么这很明显表明您确实需要上面的选项 1。

【讨论】:

  • 感谢您的回复。用例是一个快速而肮脏的测试(内联在我的控制器/springmvc 中)来模拟要解析的 json 有效负载。就那么简单。我是 java 新手,我不想从文件中加载 json 或者进入并转义每个相关的标记来代替时间。我希望有类似 json.stringify() 的东西。所有点都是有效的,在这种情况下,#1 似乎最适合用例。谢谢!
  • Java 通常在鼓励最佳实践的情况下选择更加严格/详细。虽然我认为很多人会同意,多行或未转义的字符串文字会很好,但它们被有意排除在 Java 7 之外:bugs.sun.com/view_bug.do?bug_id=4165111 有点不方便,我承认,但是花点额外的时间来划分你的代码中的数据通常会产生积极的结果。
【解决方案2】:

有多个 json 解析器可用于将 json 编组为对象,反之亦然。这些解析器中很少有

【讨论】:

  • OP 询问如何在不转义的情况下表示 JSON "
  • @sanbhat 如果您将 json 编组为 object ,则不必担心转义 ""
  • 我只是想将一个字符串模拟为从 rest 调用接收到的 json 有效负载,并将其填充到 json 对象中进行解析....当然我只想从表示的字符串开始有效载荷。
【解决方案3】:

也许这会有所帮助?

JSONObject jsonObj = new JSONObject("{'phonetype':'N95','cat':'WP'}"); 

【讨论】:

  • JSON 无效的部分除外。见:stackoverflow.com/questions/2275359/…
  • (澄清一下:因为 org.json 的东西接受无效的 JSON,这将起作用......但它可能不在符合实际规范的解析器中)
猜你喜欢
  • 2023-03-13
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多