J'ai un tableau d'objets JSON que j'essaie de convertir en YAML.
{"AAPL": [
{
"shares": -75.088,
"date": "11/27/2015"
},
{
"shares": 75.088,
"date": "11/26/2015"
},
]}
Existe-t-il une représentation équivalente dans YAML qui ne se limite pas à JSON? J'aimerais faire quelque chose comme
AAPL:
- :
shares: -75.088
date: 11/27/2015
- :
shares: 75.088
date: 11/26/2015
mais la chose la plus propre que je suis venu est
AAPL:
- {
shares: -75.088,
date: 11/27/2015
}
{
shares: 75.088,
date: 11/26/2015
}
Tu veux ça:
AAPL:
- shares: -75.088
date: 11/27/2015
- shares: 75.088
date: 11/26/2015
L'équivalent YAML d'un objet JSON est un mappage, qui ressemble à ceci:
# flow style
{ foo: 1, bar: 2 }
# block style
foo: 1
bar: 2
Notez que les premiers caractères des clés d'un mappage de bloc doivent figurer dans la même colonne. Démontrer:
# OK
foo: 1
bar: 2
# Parse error
foo: 1
bar: 2
L'équivalent d'un tableau JSON en YAML est une séquence, qui ressemble à l'un de ces éléments (qui sont équivalents):
# flow style
[ foo bar, baz ]
# block style
- foo bar
- baz
Dans une séquence de blocs, le -
s doit être dans la même colonne.
Transformons votre JSON en YAML. Voici votre JSON:
{"AAPL": [
{
"shares": -75.088,
"date": "11/27/2015"
},
{
"shares": 75.088,
"date": "11/26/2015"
},
]}
Comme point de détail, YAML est un sur-ensemble de JSON. Par conséquent, ce qui précède est déjà valide, mais nous allons utiliser les fonctionnalités de YAML pour le rendre encore plus joli.
À partir de l'intérieur, nous avons des objets qui ressemblent à ceci:
{
"shares": -75.088,
"date": "11/27/2015"
}
Le mappage YAML équivalent est:
shares: -75.088
date: 11/27/2015
Nous en avons deux dans un tableau (séquence):
- shares: -75.088
date: 11/27/2015
- shares: 75.088
date: 11/26/2015
Notez comment le -
s s'aligne et les premiers caractères des clés de mappage s'alignent.
Enfin, cette séquence est elle-même une valeur dans un mapping avec la clé AAPL
:
AAPL:
- shares: -75.088
date: 11/27/2015
- shares: 75.088
date: 11/26/2015
Analyser cela et le reconvertir en JSON donne le résultat attendu:
{
"AAPL": [
{
"date": "11/27/2015",
"shares": -75.088
},
{
"date": "11/26/2015",
"shares": 75.088
}
]
}
Vous pouvez le voir (et le modifier de manière interactive) ici .
Grande réponse ci-dessus. Une autre solution consiste à utiliser le très bon outil de wrapper yaml jq, yq à l’adresse https://github.com/kislyuk/yq
Enregistrez votre exemple JSON dans un fichier, dites ex.json, puis
yq -y '.' ex.json
AAPL:
- shares: -75.088
date: 11/27/2015
- shares: 75.088
date: 11/26/2015