'Convert json file to toml file
I am trying to convert JSON file to Toml file using python module toml but it looks like for some unknown reason the module skips over some of the key/value that is important to me. Does anyone know what is the problem?
JSON file:
{"amqp_url": "amqps://fedora:@rabbitmq.fedoraproject.org/%2Fpublic_pubsub", "callback": "fedora_messaging.example:printer", "tls": {"ca_cert": "/etc/fedora-messaging/cacert.pem", "keyfile": "/etc/fedora-messaging/fedora-key.pem", "certfile": "/etc/fedora-messaging/fedora-cert.pem"}, "client_properties": {"app": "Example Application", "app_url": "https://github.com/fedora-infra/fedora-messaging", "app_contacts_email": ["[email protected]"]}, "exchanges": {"amq.topic": {"type": "topic", "durable": true, "auto_delete": false, "arguments": {}}}, "queues": {"00000000-0000-0000-0000-000000000000": {"durable": false, "auto_delete": true, "exclusive": true, "arguments": {}}}, "bindings": [{"queue": "00000000-0000-0000-0000-000000000000", "exchange": "amq.topic", "routing_keys": ["#"]}], "consumer_config": {"example_key": "for my consumer"}, "qos": {"prefetch_size": 0, "prefetch_count": 25}, "log_config": {"version": 1, "disable_existing_loggers": true, "formatters": {"simple": {"format": "[%(levelname)s %(name)s] %(message)s"}}, "handlers": {"console": {"class": "logging.StreamHandler", "formatter": "simple", "stream": "ext://sys.stdout"}}, "loggers": {"fedora_messaging": {"level": "INFO", "propagate": false, "handlers": ["console"]}, "twisted": {"level": "INFO", "propagate": false, "handlers": ["console"]}, "pika": {"level": "WARNING", "propagate": false, "handlers": ["console"]}}, "root": {"level": "ERROR", "handlers": ["console"]}}}
Expected file:
amqp_url = "amqps://fedora:@rabbitmq.fedoraproject.org/%2Fpublic_pubsub"
callback = "fedora_messaging.example:printer"
[tls]
ca_cert = "/etc/fedora-messaging/cacert.pem"
keyfile = "/etc/fedora-messaging/fedora-key.pem"
certfile = "/etc/fedora-messaging/fedora-cert.pem"
[client_properties]
app = "Example Application"
app_url = "https://github.com/fedora-infra/fedora-messaging"
app_contacts_email = ["[email protected]"]
[exchanges."amq.topic"]
type = "topic"
durable = true
auto_delete = false
arguments = {}
[queues.00000000-0000-0000-0000-000000000000]
durable = false
auto_delete = true
exclusive = true
arguments = {}
[[bindings]]
queue = "00000000-0000-0000-0000-000000000000"
exchange = "amq.topic"
routing_keys = ["#"]
[consumer_config]
example_key = "for my consumer"
[qos]
prefetch_size = 0
prefetch_count = 25
[log_config]
version = 1
disable_existing_loggers = true
[log_config.formatters.simple]
format = "[%(levelname)s %(name)s] %(message)s"
[log_config.handlers.console]
class = "logging.StreamHandler"
formatter = "simple"
stream = "ext://sys.stdout"
[log_config.loggers.fedora_messaging]
level = "INFO"
propagate = false
handlers = ["console"]
[log_config.loggers.twisted]
level = "INFO"
propagate = false
handlers = ["console"]
[log_config.loggers.pika]
level = "WARNING"
propagate = false
handlers = ["console"]
[log_config.root]
level = "ERROR"
handlers = ["console"]
Reproduced file:
amqp_url = "amqps://fedora:@rabbitmq.fedoraproject.org/%2Fpublic_pubsub"
callback = "fedora_messaging.example:printer"
[[bindings]]
queue = "00000000-0000-0000-0000-000000000000"
exchange = "amq.topic"
routing_keys = [ "#",]
[tls]
ca_cert = "/etc/fedora-messaging/cacert.pem"
keyfile = "/etc/fedora-messaging/fedora-key.pem"
certfile = "/etc/fedora-messaging/fedora-cert.pem"
[client_properties]
app = "Example Application"
app_url = "https://github.com/fedora-infra/fedora-messaging"
app_contacts_email = [ "[email protected]",]
[consumer_config]
example_key = "for my consumer"
[qos]
prefetch_size = 0
prefetch_count = 25
[log_config]
version = 1
disable_existing_loggers = true
[exchanges."amq.topic"]
type = "topic"
durable = true
auto_delete = false
[queues.00000000-0000-0000-0000-000000000000]
durable = false
auto_delete = true
exclusive = true
[log_config.root]
level = "ERROR"
handlers = [ "console",]
[exchanges."amq.topic".arguments]
[queues.00000000-0000-0000-0000-000000000000.arguments]
[log_config.formatters.simple]
format = "[%(levelname)s %(name)s] %(message)s"
[log_config.handlers.console]
class = "logging.StreamHandler"
formatter = "simple"
stream = "ext://sys.stdout"
[log_config.loggers.fedora_messaging]
level = "INFO"
propagate = false
handlers = [ "console",]
[log_config.loggers.twisted]
level = "INFO"
propagate = false
handlers = [ "console",]
[log_config.loggers.pika]
level = "WARNING"
propagate = false
handlers = [ "console",]
The reproduced file skips for example most of the empty key/value pairs: arguments = {}
Here is my code:
import toml
import json
with open("config.json") as source:
config = json.loads(source.read())
with open("conf1.toml", "w") as f:
f.write(toml.dumps(config))
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
