разбор странного вида JSON - PullRequest
0 голосов
/ 28 июня 2011

Я использую Android, и у меня возникает странный вопрос: как мне проанализировать данные JSON, которые имеют следующий формат:

"2"

Результатом URL JSON является только это число без скобок ({ } или [ ]). Как формируется этот массив? Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 28 июня 2011

Сначала получите удаленный 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
}
1 голос
/ 28 июня 2011

Это не массив.Из вашего вопроса не очень понятно, включены ли кавычки в 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.Кажется, что:

Формально нет, но иногда это полезно.

Так что да, остальные были правы, это не RFC-допустимый JSON.Извините за смущение людей.Однако, похоже, что большинство парсеров это понимают.

0 голосов
/ 28 июня 2011

Это недопустимый JSON, поэтому вы не можете его проанализировать.

JSONLint говорит:

Parse error on line 1:
"2"
^
Expecting '{', '['

Из него можно создать действительный JSONлибо поместив его в массив:

["2"]

или в объект:

{"value":"2"}
0 голосов
/ 28 июня 2011

Это не допустимая строка JSON.Таким образом, вы не можете разобрать его как JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...