【问题标题】:Removing quotation marks in JSONObject删除 JSONObject 中的引号
【发布时间】:2010-06-01 18:24:23
【问题描述】:

我正在使用 net.sf.json.JSONObject 创建一些要发送到前端应用程序的数据,而我与之交互的代码不喜欢它为每个字段名称添加引号的方式.

例如:

 myString = new JSONObject().put("JSON", "Hello, World!").toString();

产生字符串 {"JSON": "Hello, World"}。

我希望它返回的是 {JSON: "Hello, World"} - "JSON" 周围没有引号。我该怎么做才能做到这一点?

【问题讨论】:

  • 你为什么要这么做?(我很好奇)
  • 因为我正在与喜欢这种方式的现有代码进行交互。 (只是编辑了原始问题以使其更清楚。)

标签: java json


【解决方案1】:

我遇到过一些 Web 应用程序/库,例如 amCharts,它们支持 JavaScipt 输入等 JSON,因为不支持真正的 JSON,所以您的请求是必需的。

您可以做的是创建一个通用的 javascript 函数并使用一点 RegEx 来过滤 JSON。

function CleanJSONQuotesOnKeys(json) {
    return json.replace(/"(\w+)"\s*:/g, '$1:');
}

【讨论】:

    【解决方案2】:

    javadoc

    toString 产生的文本 方法严格符合 JSON 语法规则。

    如果你想符合 JSON 语法规则,你不应该删除引号。

    或者,如果您不关心规则,您可以创建自己的简单方法来构造这些字符串。

    另外,正如@CharlesLeaf 所说,替换第一次出现的 2 个引号是有效的。

    【讨论】:

      【解决方案3】:

      我能问一下你为什么要这样做吗?它不会节省请求中传输的总字节数。

      无论如何,我想说你必须写一些东西,一个正则表达式或其他东西,将/\"([^"]+)\"\:/替换为第一个匹配$1。我不会流利地使用 Java,所以我实际上无法提供更多帮助。

      【讨论】:

      • 我正在尝试更改一些后端代码,而不会过多地与前端混在一起......而且前端似乎不喜欢引号。所以我只是想给前端它想要的东西。
      • 似乎是前端的一个错误。但无论如何,我的正则表达式应该能帮到你。将\"([^"]+)\"\: 替换为$1: 以在Java 中应该可以使用的任何方式。 $1 将匹配,在您的示例中为 JSON
      • 是的,它会...当您使用 nodejs 通过 websockets 传输大量数据时,您在不传输双引号的情况下通过管道保存的数据量是巨大的。跨度>
      【解决方案4】:

      JSON definition 将每一对描述为一个字符串 : 值,因此您不能指望 net.sf 库会违反该特定合同。如果您担心在返回某些 javascript 代码时能够访问这些值(如果这是您正在做的事情),那么您不必这样做。

      var str = {"JSON": "Hello, World"};
      var obj = eval(str);
      alert(obj.JSON); // Alerts "Hello, World"
      

      【讨论】:

      • 如果 OP 想要一个字符串,我认为可以。但是如果 OP 想从 {"JSON": "Hello world"} 创建一个对象,他可以使用jQuery.parseJSON("a json string here");
      【解决方案5】:

      您可以使用以下方法从 json 中的属性名称中排除引号:

      net.sf.json.util.WebUtils.toString(JSONObject);

      参考javadoc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 2018-09-02
        • 2016-03-09
        • 1970-01-01
        • 2017-11-20
        • 2015-01-01
        相关资源
        最近更新 更多