【问题标题】:I can't recreate the JSON object from unescaped Java string of JSON我无法从 JSON 的未转义 Java 字符串重新创建 JSON 对象
【发布时间】:2019-01-07 17:16:30
【问题描述】:

我在下面的代码中遇到了一些问题。

  import org.json.JSONObject;

/**
 * 
 * @author ajmalsha
 *
 */
public class test {

    /**
     * 
     * @param args
     */
    public static void main(String[] args) {

        String value="[Mother’s Day, Birthday \"Add to Cart\"]";

        JSONObject data= new JSONObject();
        data.put("title", value);
        System.out.println(data);
        String finalData=org.apache.commons.lang3.StringEscapeUtils.unescapeJava(data.toString());
        System.out.println(finalData);
    }

}

上面代码的输出是

{"title":"[Mother\u2019s Day, Birthday \"Add to Cart\"]"}
{"title":"[Mother’s Day, Birthday "Add to Cart"]"}

上面第一个JSON正常生成,这里Mother’s被替换为\u2019

我能够使用 org.apache.commons.lang3.StringEscapeUtils 检索原始值,但无法从该 finalData 字符串重建 JSON。

谁能帮帮我。

【问题讨论】:

  • 如果您将字符串转义为 Java 通常转义的内容,那么您如何期望 JSON 解析器始终能够使用它?
  • 在我的输入中,我将 Mother's 更改为 Mother\u2019s。我需要避免这种变化,这就是我喜欢这个的原因。还有其他解决方案吗?
  • 由于您使用 JSONObject 创建 json,我将使用同一库的解析器再次解析它 - 而不是一些基于 Java 的实用程序。

标签: java json apache unicode-escapes


【解决方案1】:

为什么你需要这个过程只是序列化和反序列化如下。 如果您尝试从文件中读取未转义的 json 并构造 JSONObject,则会抛出 org.json.JSONTokener.syntaxError。您应该使用转义的 json 来重建它。

    String value="[Mother’s Day, Birthday \"Add to Cart\"]";

    JSONObject data= new JSONObject();
    data.put("title", value);
    System.out.println(data.toString());

    String deserialized = new JSONObject(data.toString()).getString("title");
    System.out.println(deserialized);

输出:

{"title":"[Mother\u2019s Day, Birthday \"Add to Cart\"]"}
[Mother’s Day, Birthday "Add to Cart"]

【讨论】:

  • 我的预期输出和你的输出不同。我需要以相同形式的 JSON 输出,但需要避免 unicode 转换
  • 我的意思是说你可以从 data.toString() 反序列化,如果你想用引号显示 json,你可以使用 org.apache.commons.lang3.StringEscapeUtils.unescapeJava(data.toString( ));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2022-01-22
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多