2015-10-15 70 views
0

创建JsonObjectJsonArray如下:的JSONObject并不correctely创建

JSONObject jObj = new JSONObject(); 
jObj.put("path", "dfds/g"); 
jObj.put("etag", "dfdsfsd"); 
jObj.put("size_bytes", 123); 
JSONArray list = new JSONArray(); 
list.add(jObj); 
String s = list.toJSONString(); 

结果我得到:

[{"size_bytes":123,"etag":"dfdsfsd","path":"dfds\/g"}] 
  1. 我期望的路径组件是"path":"dfds\g",不dfds\/g
  2. 我需要该字段按照他们在代码中的顺序排列,但它们并不如我预期的那样:path, etag, size_bytes 我心底很高兴得到一个建议如何解决上述问题
+0

您的对象中元素的顺序应该无关紧要,无论您应该能够转换为和来自'JSON'。 'backslash'似乎是为了逃避'forwardslash' –

回答

4

JSON的编码器逃避你的斜杠这就是为什么你得到\/。这是完全合法的语法,不需要担心。

您不应该担心在Json字符串内部进行排序,字段本身没有排序,并且依赖于此可能会在将来导致您的问题。

+0

json字符串被发送到其他进程,它希望路径没有'\':不能读取'dfds \/g',期望'dfds \ g' – Yakov

+0

使用JSON解码器而不是手动完成这将是我的最佳建议 – tddmonkey

+0

我形成json字符串并将其发送到其他进程。该过程是3方。我只是知道它期望的路径没有'\' – Yakov

0

如果你绝对必须你的字符串中删除斜杠,那么你可以这样做:

s = s.replace("\\/", "/"); 

更多信息请参见String replace a Backslash

我建议在这种情况下不要这样做。相反,您应该使用众多JSON解析库之一解析String

这里是一个这样的例子在行动与样品String

public static void main(String[] args){ 
    String s = "[{\"size_bytes\":123,\"etag\":\"dfdsfsd\",\"path\":\"dfds\\/g\"}]"; 

    System.out.println(s); 

    s = s.replace("\\/", "/"); 

    System.out.println(s); 
} 

输出:

[{"size_bytes":123,"etag":"dfdsfsd","path":"dfds\/g"}]

[{"size_bytes":123,"etag":"dfdsfsd","path":"dfds/g"}]

+0

我没在做解析。我只是应该发送具有正确格式的字符串到其他进程。该过程是3方。我只是知道它期望的路径'\' – Yakov

+0

@Yakov那么做's.replace()'应该工作,ymmv –

相关问题