Una URL no puede llevar un documento JSON tal como esta. Llaves, comillas, espacios y todo por encima de ASCII todo tiene que ser codificado por centesimas antes de poder ir a una cadena de consulta o un segmento de ruta.
Usando el codificador y decodificador de URL de JSON
Elige Codificar o Decodificar, pega tu documento, y presiona Convertir.
Codificar sigue la misma regla que encodeURIComponent: cada byte UTF-8
fuera de un pequeno conjunto seguro se convierte en un escape %XX.
{"q":"a b+c","clef":"𝄞"}
se codifica como %7B%22q%22%3A%22a%20b%2Bc%22%2C%22clef%22%3A%22%F0%9D%84%9E%22%7D,
coincidiendo exactamente con lo que encodeURIComponent produce para el
mismo documento, incluyendo el simbolo musical 𝄞 como cuatro escapes
%XX separados, ya que toma cuatro bytes en UTF-8.
La unica opcion, y por que existe
Activar “Espacio es un signo de mas” y el mismo documento codifica el espacio
como + en lugar de %20, mientras que el + literal en los datos se
convierte en %2B. Esa distincion es toda la razon por la que esto es un
interruptor en lugar de una suposicion: la cadena de consulta de una URL y
un envio de formulario no estan de acuerdo sobre que significa un + solo.
En el cuerpo de un formulario, + significa un espacio. En todas las demas
partes de una URL, + es un signo de mas literal. Adivinar mal convierte
cada mas en tus datos en un espacio, o deja cada espacio codificado como
un signo de mas literal, que es una de las formas mas comunes en que un
documento codificado llega silenciosamente corrompido al otro lado.
Decodificacion, y por que ocurre en un solo paso
La decodificacion recopila cada byte escapado por centesimas en toda la cadena
y los decodifica como UTF-8 una vez, al final, en lugar de un escape a la vez.
Un caracter multibyte como un emoji llega como varios escapes %XX separados
en secuencia, por lo que decodificar cada uno individualmente y tratarlo como
su propio caracter convertiria un emoji en varios caracteres de reemplazo.
Decodificar una vez al final es lo que mantiene intacto el texto multibyte, y
tambien permite que bytes que no son UTF-8 valido se reporten como su propio
tipo de fallo, distinto de un signo de porcentajes sin digitos hexadecimales
validos despues de el, que decodeURIComponent no puede distinguir por si solo.
Viaje de ida y vuelta
Codificar el ejemplo anterior con “Espacio es un signo de mas” activado y
luego decodificarlo de vuelta devuelve el documento original exacto, "a b+c"
y el simbolo musical ambos intactos, que es la verdadera prueba de que el
manejo de mas y espacios esta de acuerdo en ambas direcciones.