代码之家  ›  专栏  ›  技术社区  ›  Ajmal Sha PbxMan

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

  •  0
  • Ajmal Sha PbxMan  · 技术社区  · 7 年前

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

      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 但无法从中重建JSON finalData 弦。

    有人能帮忙吗。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Emre Savcı    7 年前

    为什么您需要这个过程只是序列化和反序列化如下。 如果您试图从文件中读取未转换的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"]