我无法从JSON的未转义Java字符串重新创建JSON对象

时间:2018-07-31 10:26:05

标签: java json apache unicode-escapes

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

  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中,正常生成了JSON,其中的{​​{1}}被Mother’s

取代了

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

任何人都可以帮忙。

1 个答案:

答案 0 :(得分:0)

为什么需要此过程仅按以下顺序进行序列化和反序列化。 如果您尝试从文件中读取未转义的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"]