我正在使用Android,我有一个奇怪的问题:如何解析具有以下格式的JSON数据:
"2"
JSON网址结果仅为此数字,没有任何括号({ }
或[ ]
)。这个数组是如何形成的?提前谢谢。
答案 0 :(得分:1)
那不是数组。从您的问题中不清楚引号是否包含在JSON中。 如果是,则它是一个有效的JSON字符串。如果没有,它是一个有效的JSON编号。根据具体情况,解析它非常容易(使用Android的内置org.json
解析器):
String jsonString = (String) new JSONTokener("\"2\"").nextValue();
或:
int jsonInt = (Integer) new JSONTokener("2").nextValue();
修改以满足您的设想:
String jsonString = (String) new JSONTokener(someStringThatComesFromTheServer).nextValue();
if (jsonString.equals("WRONG_PASS")) {
// do stuff
}
else if (jsonString.equals("WRONG_USER")) {
// do stuff
}
else {
// do stuff, such as:
int userId = Integer.parseInt(jsonString);
}
编辑2:我实际上与RFC4627的作者Douglas Crockford取得了联系。看来:
正式,不,但它有时很有用。
所以是的,其他人都是对的,它不是RFC有效的JSON。抱歉让人困惑。但是,似乎大多数解析器都理解它。
答案 1 :(得分:1)
首先检索远程URL并确定它是JSON还是text / plain
URL url = new URL("http://www.google.com/humans.txt");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
int status = http.getResponseCode();
String contentType = http.getContentType();
String encoding = http.getContentEncoding() == null ? "utf-8" : http.getContentEncoding();
宣读回复正文。
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len = 0;
byte[] buffer = new buffer[1024];
while (len = (in.read(buffer)) {
out.write(buffer, 0, len);
}
String contents = new String(out.toByteArray(), encoding);
根据内容类型标题,您可以决定它是JSON还是普通/文本内容。或者,查看第一个字符,看它是否是一个开口大括号。
if (contentType == null) {
// handle bad doc here
} else if (contentType.equals("application/json") || content.startsWith("{")) {
// parse JSON document here
} else if (content.equals("2")) {
// handle 2
} else if (content.equals("WRONG_PASS") || content.equals("WRONG_USER")) {
// handle wrong user/pass
} else {
// handle this as well
}
答案 2 :(得分:0)
这不是有效的JSON字符串。因此,您无法将其解析为JSON。
答案 3 :(得分:-1)
这不是有效的JSON,所以你不能解析它。
JSONLint说:
Parse error on line 1:
"2"
^
Expecting '{', '['
您可以通过将其放入数组中来创建有效的JSON:
["2"]
或在一个对象中:
{"value":"2"}