Investigamos por todo el mundo online para así mostrarte la respuesta para tu problema, si tienes inquietudes puedes dejarnos tu inquietud y te contestaremos con gusto, porque estamos para ayudarte.
Solución:
Puede definir su propio objeto y decirle a Mathematica que lo interprete como un objeto JSON.
Exportación ficticia para cargar contextos relevantes:
In[1]:= ExportString["", "JSON"];
Dígale a Mathematica que interprete JSONObject
símbolo como posible cabeza de objetos JSON:
In[2]:= ClearAll[JSONObject]
System`Convert`JSONDump`$JSONObjectHead = JSONObject;
Ahora puedes usar JSONObject
en cualquier lugar de la expresión exportada:
In[4]:= ExportString[JSONObject[], "JSON"]
Out[4]=
In[5]:= ExportString["a" -> JSONObject[], "JSON"]
Out[5]= "a" :
In[6]:= ExportString[JSONObject["a" -> JSONObject["b" -> Null]], "JSON"]
Out[6]= "a" : "b" : null
Cómo funciona
La exportación interna a JSON está a cargo de System`Convert`JSONDump`exportJSON
función que es solo un envoltorio para System`Convert`JSONDump`iexportJSON
. Este último llama System`Convert`JSONDump`toString
que hace la conversión real y, entre otras, incluye las siguientes definiciones (System`Convert`JSONDump`
contexto eliminado de los nombres de los símbolos):
toString[x_?($JSONObjectHead =!= List && MatchQ[#1, $JSONObjectHead[]]&), `t_Integer] :=
toString[x_?($JSONObjectHead =!= List && Head[#1] === $JSONObjectHead && Length[#1] =!= 0&), t_Integer] := toString[List @@ x, t]
ese uso $JSONObjectHead
.
Cómo averiguarlo, cómo funciona la exportación
Puede comenzar rastreando la evaluación de la expresión de exportación:
TracePrint[
ExportString["mySpecialString", "JSON"],
_[___, "mySpecialString", ___]
]
Encontrarás eso System`Convert`JSONDump`
El contexto parece interesante. Para obtener una descripción general rápida de sus símbolos, puede consultar:
Names["System`Convert`JSONDump`*"] // TableForm
La verdadera diversión comenzará si usas esta gran herramienta de espeleología:
Get["https://raw.githubusercontent.com/szhorvat/Spelunking/master/Spelunking.m"]
Elija una función, de la traza impresa que parezca prometedora:
Spelunk["System`Convert`JSONDump`exportJSON"]
y profundice más haciendo clic en los enlaces a las funciones que ve en el seguimiento.
Acerca de la herramienta de espeleología que aprendí de una de las respuestas de halirutans.
Para versiones más nuevas que exportan un archivo vacío Association
hace lo que quieres:
ExportString[<||>, "JSON"]
Versiones más nuevas significa que las versiones >= 10.1, 10.0.x se exportaron vacías Associations
a listas vacías, por supuesto, el nuevo comportamiento es mucho mejor para la distinción de listas vacías de JavaScript y objetos en Mathematica…
Como mencionó Kuba en un comentario, el formato de exportación “JSON” tiene algunas deficiencias que se superan con el formato de exportación “RawJSON”, que parece funcionar mejor que “JSON” en muchos aspectos, especialmente cuando se trabaja con Asociaciones…
El ejemplo de Kubas donde “JSON” da un error mientras que “RawJSON” funciona como se esperaba fue:
ExportString[<|"test" -> <||>|>, "RawJSON"]
Reseñas y valoraciones del tutorial
Te invitamos a avalar nuestra ocupación añadiendo un comentario o puntuándolo te damos la bienvenida.