json - comando - tellraw generator 1.12 1
¿JSON puede comenzar con "["? (2)
JSON puede ser una matriz o un objeto. Específicamente fuera de json.org:
JSON se basa en dos estructuras:
- Una colección de pares de nombre / valor. En varios idiomas, esto se realiza como un objeto, registro, estructura, diccionario, tabla hash, lista de claves o matriz asociativa.
- Una lista ordenada de valores. En la mayoría de los idiomas, esto se realiza como un
matriz, vector, lista o secuencia.
A continuación, describe las dos estructuras como:
Tenga en cuenta que los caracteres inicial y final son corchetes y corchetes, respectivamente.
Editar
Y desde aquí: http://www.ietf.org/rfc/rfc4627.txt
Un texto JSON es una secuencia de tokens. El conjunto de tokens incluye seis caracteres estructurales, cadenas, números y tres nombres literales.
Un texto JSON es un objeto serializado o matriz.
Actualización (2014)
A partir de marzo de 2014, existe un nuevo JSON RFC ( 7159 ) que modifica levemente la definición (ver páginas 4/5).
La definición por RFC 4627 fue: JSON-text = object / array
Esto ha sido cambiado en RFC 7159 a: JSON-text = ws value ws
Donde ws
representa espacios en blanco y el value
se define de la siguiente manera:
Un valor JSON DEBE ser un objeto, matriz, número o cadena, o uno de los siguientes tres nombres literales:
false null true
Entonces, la respuesta a la pregunta sigue siendo sí, el texto JSON puede comenzar con un corchete (es decir, una matriz). Pero además de objetos y matrices, ahora también puede ser un número, cadena o los valores false
, null
o true
.
Además, esto ha cambiado desde mi anterior cita RFC 4627 (énfasis agregado):
Un texto JSON es una secuencia de tokens. El conjunto de tokens incluye seis caracteres estructurales, cadenas, números y tres nombres literales.
Un texto JSON es un valor serializado. Tenga en cuenta que ciertas especificaciones previas de JSON obligaban a un texto JSON a ser un objeto o una matriz. Las implementaciones que generan solo objetos o matrices en las que se solicita un texto JSON serán interoperables en el sentido de que todas las implementaciones aceptarán que se trata de textos JSON conformes.
Según lo que puedo leer en json.org , todas las cadenas JSON deben comenzar con {
(llave), y [
caracteres (corchetes) representan un elemento de la matriz en JSON.
Utilizo la biblioteca json4j
, y obtuve una entrada que comienza con [
, así que no creo que esto sea JSON válido. Miré brevemente el esquema de JSON, pero no pude encontrarlo. Afirmó que un archivo JSON no puede comenzar con [
, o que solo puede comenzar con {
.
Si la cadena que está analizando comienza con un paréntesis izquierdo ([) puede usar JSONArray.parse
para recuperar un objeto JSONArray y luego puede usar get(i)
donde i es un índice de 0 a través del size()-1
de JSONArray devuelto size()-1
.
import java.io.IOException;
import com.ibm.json.java.JSONArray;
import com.ibm.json.java.JSONObject;
public class BookListTest {
public static void main(String[] args) {
String jsonBookList = "{/"book_list/":{/"book/":[{/"title/":/"title 1/"},{/"title/":/"title 2/"}]}}";
Object book_list;
try {
book_list = JSONObject.parse(jsonBookList);
System.out.println(book_list);
Object bookList = JSONObject.parse(book_list.toString()).get("book_list");
System.out.println(bookList);
Object books = JSONObject.parse(bookList.toString()).get("book");
System.out.println(books);
JSONArray bookArray = JSONArray.parse(books.toString());
for (Object book : bookArray) {
System.out.println(book);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Que produjo resultados como:
{"book_list":{"book":[{"title":"title 1"},{"title":"title 2"}]}}
{"book":[{"title":"title 1"},{"title":"title 2"}]}
[{"title":"title 1"}, {"title":"title 2"}]
{"title":"title 1"}
{"title":"title 2"}
Nota: si intentó llamar a JSONObject.parse(books.toString());
obtendrías el error que encontraste:
java.io.IOException: Expecting ''{'' on line 1, column 2 instead, obtained token: ''Token: [''