Conversion mutuelle entre JSON et YAML / TOML en Python

Conversion mutuelle entre JSON et YAML / TOML en Python

Ce n'est pas pratique que je ne puisse pas écrire de commentaires avec JSON, j'ai donc essayé YAML / TOML. Ini qui utilise configparser est hors de portée cette fois.

Si vous n'êtes pas familier avec le format de définition, il est plus facile de comprendre comment convertir le fichier de définition que vous utilisez normalement dans un autre format via un dictionnaire plutôt que d'écrire la définition en YAML / TOML depuis le début. Puisqu'il est accessible via un dictionnaire à l'intérieur du programme, je ne pense pas qu'il soit nécessaire de modifier le traitement lui-même. Cette fois, je voudrais tester sur la base des données suivantes.

dat.json[données de test]


{
  "country": "Japan",
  "user": [
    {
      "name": "Taro",
      "phone": ["111-222-3333", "222-333-4444"],
      "age": 10
    },
    {
      "name": "Hanako",
      "phone": ["555-666-777"],
      "age": 20
    }
  ]
}

Méthode de conversion

En plus de json, utilisez les bibliothèques yaml et toml.

JSON→YAML Utilisez la bibliothèque yaml pour convertir de JSON en YAML.

json2yaml.py


import yaml
import json

with open('dat.json') as file:
    #Dictionnaire de JSON
    obj = json.load(file)
    #YAML du dictionnaire
    ym = yaml.dump(obj, Dumper=yaml.CDumper)
    print(ym)

Résultat d'exécution


country: Japan
user:
- age: 10
  name: Taro
  phone:
  - 111-222-3333
  - 222-333-4444
- age: 20
  name: Hanako
  phone:
  - 555-666-777

YAML→JSON Il semble préférable d'utiliser safe_load pour charger le fichier YAML. La méthode de référence est la même que JSON, vous pouvez donc l'utiliser sans aucune gêne. (Le résultat du traitement sera le même qu'avant la conversion, il est donc omis.)

yaml2json.py


with open('dat.yaml') as file:
    #Dictionnaire de YAML
    obj = yaml.safe_load(file)
    #JSON du dictionnaire
    js = json.dumps(obj, indent=2)
    print(js)

JSON→TOML Utilisez la bibliothèque toml pour convertir de JSON en TOML. L'utilisation est la même que YAML et JSON. De plus, il semble que pytoml ne soit pas maintenu.

json2toml.py


import toml
import json

with open('dat.json') as file:
    #Dictionnaire de JSON
    obj = json.load(file)
    #TOML du dictionnaire
    tm = toml.dumps(obj)
    print(tm)

Résultat d'exécution


country = "Japan"
[[user]]
name = "Taro"
phone = [ "111-222-3333", "222-333-4444",]
age = 10

[[user]]
name = "Hanako"
phone = [ "555-666-777",]
age = 20

Je suis un peu inquiet pour la dernière virgule de l'élément de téléphone w

TOML→JSON La lecture de TOML est similaire à JSON / YAML.

toml2json.py


with open('dat.toml') as file:
    #Dictionnaire de TOML
    obj = toml.load(file)
    #JSON du dictionnaire
    js = json.dumps(obj, indent=2)
    print(js)

Résumé

YAML / TOML ont tous deux des avantages et des inconvénients, mais ceux qui sont habitués à JSON ont estimé que TOML est plus facile à lire.

Ce que je veux faire dans le futur

Je voudrais implémenter TomlEncoder de toml.dumps indépendamment pour prendre en charge ce qui suit.

Recommended Posts

Conversion mutuelle entre JSON et YAML / TOML en Python
Différence entre == et est en python
Différence d'authenticité entre Python et JavaScript
différence entre les instructions (instructions) et les expressions (expressions) en Python
Différences entre la syntaxe Python et Java
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
Lire et écrire des fichiers JSON avec Python
Différences de multithreading entre Python et Jython
[python] Différence entre variable et self. Variable dans la classe
[Python] Mémo de conversion entre les données temporelles et les données numériques
À propos de la différence entre "==" et "is" en python
Lire et écrire des fichiers CSV et JSON avec Python
Conversion en virgule fixe et binaire
POST JSON avec Python et recevez avec PHP
Manipulation de json en python
Différence entre Ruby et Python en termes de variables
Conversion mutuelle entre la date et les jours écoulés depuis le 1er janvier 2000
Joli imprimé json ou yaml avec couleur en python
Différence entre return, return None et no return description en Python
Comparez la "relation log et infini" avec Gauche (0.9.4) et Python (3.5.1)
Formatez facilement JSON avec Python
Conversion entre unixtime et datetime
Pile et file d'attente en Python
Unittest et CI en Python
Module Python num2words Différence de comportement entre l'anglais et le russe
Méthode de concaténation de liste en python, différence entre list.extend () et opérateur «+»
Différence entre Ruby et Python Split
Différence entre java et python (mémo)
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Afficher les photos en Python et html
Ecrire un schéma JSON avec Python DSL
Algorithme de tri et implémentation en Python
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Charger dynamiquement les types json avec python
Gestion des fichiers JSON en Python
Coopération entre le module python et l'API
Encodage et décodage JSON avec python
Différence entre Python, stftime et strptime
Vérifiez et déplacez le répertoire en Python
Différence entre la série python2 et la série python3 dict.keys ()
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
[Python3] Enregistrez la matrice de moyenne et de covariance dans json avec les pandas
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python
Journalisation Python et vidage vers json
[Python] Différence entre fonction et méthode
Inverser le pseudonyme plat et le katakana en Python2.7
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Fonction pour ouvrir un fichier en Python3 (différence entre open et codecs.open et comparaison de vitesse)
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)
Créer et lire des paquets de messages en Python
[Python] Résumé de la conversion entre les chaînes de caractères et les valeurs numériques (code ascii)