пытаясь преобразовать json (файл журнала базы данных) в xml-файл с помощью python. [Дубликат]

Для моих скоплений я обычно получаю желание видеть среднее и «насколько велика эта группа» (длина a.k.a.). Так что это мой удобный фрагмент для этих случаев:

agg.mean <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="mean")
agg.count <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="length")
aggcount <- agg.count$columnToMean
agg <- cbind(aggcount, agg.mean)
36
задан Ryan McGreal 25 January 2012 в 01:56
поделиться

5 ответов

Ничего не получилось сразу, поэтому я пошел вперед и написал сценарий, который решает эту проблему.

Python уже позволяет вам конвертировать из JSON в собственный dict (используя json или, в версиях & lt; 2.6, simplejson), поэтому я написал библиотеку, которая преобразует родные dicts в строку XML .

https://github.com/quandyfactory/dict2xml

Он поддерживает int, float, boolean, string (и unicode), array и dict типы данных и произвольное вложение (yay рекурсия).

29
ответ дан Ryan McGreal 21 August 2018 в 14:33
поделиться
from json import loads
from dicttoxml import dicttoxml

s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
xml = dicttoxml(json.loads(s))

Или, если ваши данные хранятся в pandas data.frame, поскольку мой часто:

df['xml'] = df['json'].apply(lambda s: dicttoxml(json.loads(s))
0
ответ дан cangers 21 August 2018 в 14:33
поделиться

Загрузите его в dict, используя json.loads, затем используйте что-нибудь из этого вопроса ...

Сериализовать словарь Python в XML

12
ответ дан Community 21 August 2018 в 14:33
поделиться

Если у вас нет такого пакета, вы можете попробовать:

def json2xml(json_obj, line_padding=""):
    result_list = list()

    json_obj_type = type(json_obj)

    if json_obj_type is list:
        for sub_elem in json_obj:
            result_list.append(json2xml(sub_elem, line_padding))

        return "\n".join(result_list)

    if json_obj_type is dict:
        for tag_name in json_obj:
            sub_obj = json_obj[tag_name]
            result_list.append("%s<%s>" % (line_padding, tag_name))
            result_list.append(json2xml(sub_obj, "\t" + line_padding))
            result_list.append("%s</%s>" % (line_padding, tag_name))

        return "\n".join(result_list)

    return "%s%s" % (line_padding, json_obj)

Например:

s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
j = json.loads(s)
print(json2xml(j))

Результат:

<main>
        <aaa>
                10
        </aaa>
        <bbb>
                1
                2
                3
        </bbb>
</main>
9
ответ дан diemacht 21 August 2018 в 14:33
поделиться
  • 1
    Он показывает нерешенную опорную ошибку при рекурсивном вызове в Python2.7 – Abhilash Cherukat 6 February 2015 в 12:45
  • 2
    s = {'person': {'web': {'email': 'boo@baz.com'}, 'address': {'street1': '123 Bar St', 'street2': '', 'state': 'WI', 'zip': 55555, 'city': 'Madison'}}}. Он дает `j = json.loads (s) файл« /usr/lib/python2.7/json / __ init __. Py », строка 338, в нагрузках возвращает _default_decoder.decode (s) File & quot; / usr / lib /python2.7/json/decoder.py" ;, строка 366, в декоде obj, end = self.raw_decode (s, idx = _w (s, 0) .end ()) Файл / usr / lib / python2. 7 / json / decoder.py ", строка 382, ​​в raw_decode obj, end = self.scan_once (s, idx) ValueError: Ожидание имени свойства: строка 1 столбец 2 (char 1)` – Ursa Major 29 January 2016 в 02:13
0
ответ дан Anurag Misra 1 November 2018 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: