【问题标题】:JSON-lib escaping / preserving stringsJSON-lib 转义/保留字符串
【发布时间】:2010-12-28 15:32:32
【问题描述】:

我正在为 java http://json-lib.sourceforge.net 使用 JSON-lib 库

我只想添加看起来像 JSON 的简单字符串(但我不希望库自动找出它可能是 json 并将其视为字符串)。调查图书馆的来源,如果没有丑陋的黑客,我找不到办法。

示例:

JSONObject object = new JSONObject();
String chatMessageFromUser = "{\"dont\":\"treat it as json\"}";
object.put("myString", chatMessageFromUser);

object.toString() 会给我们{"myString":{"dont":"treat it as json"}}

我只想拥有{"myString":"{\"dont\":\"treat it as json\"}"}

如何在不修改源代码的情况下实现?我正在使用这段代码作为来自用户的聊天消息的传输 - 所以它适用于正常的聊天消息,但是当用户将 JSON 格式作为消息输入时,由于此处描述的 JSON-lib 的默认行为,它会破坏它。

【问题讨论】:

    标签: java json json-lib


    【解决方案1】:

    如果我正确理解了问题,我认为 json-lib 的独特之处在于它假设传递的字符串需要被解析。其他库通常将其视为要包含的字符串(根据需要转义双引号和反斜杠),即按您的预期工作。

    所以你可能想考虑其他库:我推荐Jackson,Gson 也可以。

    【讨论】:

    • 正确,json-lib 总是会先尝试解析字符串: if( JSONUtils.isString( value ) ) { String str = String.valueOf( value ); if( JSONUtils.hasQuotes( str ) ){ 字符串剥离 = JSONUtils.stripQuotes( str ); if( JSONUtils.isFunction( stripped )){ ... } if(stripped.startsWith("[") && stripped.endsWith("]")) { ... } if(stripped.startsWith("{") && stripped.endsWith("}")) { ... } return str; }
    • 好的。这是一种非常有趣的方法……对我来说似乎不直观,但也许它适用于 json-lib 作者的用例。
    • 根据我的问题stackoverflow.com/questions/6155560/… - 我们绝对确定没有办法使用 JSON-lib 完成这种行为吗?我真的想避免换掉那个部门。
    • 我不知道,因为我只是随便使用了json-lib(针对它编写了基准代码)。
    【解决方案2】:

    json-simple 提供了一个JSONObject.escape() 方法。

    【讨论】:

    • 我只是用 json-simple 重写了应用程序,它工作得很好,你甚至不必 escape() 它,默认情况下它将字符串视为字符串,而不是尝试将其解析为 JSON。 json-simple 让生活变得如此简单。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多