解析奇怪的JSON

时间:2011-06-28 13:31:29

标签: android json

我正在使用Android,我有一个奇怪的问题:如何解析具有以下格式的JSON数据:

"2"

JSON网址结果仅为此数字,没有任何括号({ }[ ])。这个数组是如何形成的?提前谢谢。

4 个答案:

答案 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"}