Вставьте объект JSON в качестве аргумента в Python (Escape the Quote) - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь передать объект JSON в качестве аргумента скрипту python2, он работает, но окончательные данные json имеют одинарную кавычку ('), заключающую объект.

Ниже мой код

import json
import sys
print sys.argv[1]
data_str = sys.argv[1].decode('string-escape')

print data_str
# The above print's fine with no single quotes

json_data= {
    "server-name": "servername",
    "transaction-id": "transaction_id",
    "user-id": "user_id",
    "change-id": "change_id",
    "consumer-name": "consumer_name",
    "platform": "platform",
    "cookbooks": [
        {
            "cookbook-name": "cookbook_name",
            "cookbook-version": "cookbook_version",
            "recipe-name": "receipie_name",
            "attributes": {

            }
        }
                ]
            }
json_data["cookbooks"][0]["attributes"] = data_str.decode('string-escape')

print json_data["cookbooks"]

Исполнение

C:\Python26\python.exe saver.py "{apple:newf,mango:newb}" 
 {apple:newf,mango:newb} 
{apple:newf,mango:newb} 
[{'cookbook-name': 'cookbook_name', 'cookbook-version': 'cookbook_version', 'recipe-name': 'receipie_name', 'attributes': '{apple:newf,mango:newb}'}]

Исходя из вышеприведенного вывода, окончательная json_data содержит кавычки в значении атрибута 'attribute': ' {apple: newf, mango: newb} ' , что вызывает ошибку в моем вызове GET. Как избежать этой единственной цитаты.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Простите, если я ошибаюсь, но я думаю, что вы перепутали с преобразованием типа строки аргумента и декодированием строки json.

Одинарные кавычки в вашем результате означают, что все значение является строкой.

Во-первых, аргумент, который вы передаете в командной строке, недопустим в формате JSON.

Попробуйте запустить вашу программу так:

C:\Python26\python.exe saver.py "{\"apple\":\"newf\",\"mango\":\"newb\"}"

Затем позже расшифруйте JSON, содержащийся в строке, следующим образом:

json_data["cookbooks"][0]["attributes"] = json.loads(data_str)

т.е. json.loads, а не str.decode

на данный момент переменная "json_data" не содержит JSON, она содержит словарь

Затем вам нужно будет закодировать весь json_data, чтобы передать его в какой-то необработанной форме http GET, если только у вас нет какого-то API, делающего это для вас. Что-то вроде

encoded_json_data = json.dumps(json_data)
0 голосов
/ 05 июля 2018

Если вы хотите работать с JSON, используйте модуль json, встроенный в ваш Python. Не пытайтесь выдумать проблему, рассматривая ее как строковые данные Python, когда это не так.

import json

тогда:

json_data["cookbooks"][0]["attributes"] = json.loads(sys.argv[1])

Тогда, если вы хотите вывести свою структуру данных Python как json:

print(json.dumps(json_data["cookbook"]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...