удалить \ в столбце объекта при скрытой записи в json pandas python - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть пользовательский фрейм данных

id | user  | phone
------------------
1  | chris | {"device": "a", "brand": "a"}
2  |  nat  | {"device": "a", "brand": "a"}
3  | zack  | {"device": "a", "brand": "a"}

, затем передайте его в переменную объекта

rows = df.loc[df['id'] == 1]
merged = {'data': rows.reindex(columns=df.columns.values).to_dict('records')}
with open((path + '/' + filename + '.json'), 'w') as fp:
        json.dump(merged, fp)

, затем получите filename.json:

{
  "data": {
    "id" : 1,
    "user" : "chris",
    "phone": "{\"device\": \"a\", \"brand\": \"a\"}"
   }
}

ожидаемый результат:

{
  "data": {
    "id" : 1,
    "user" : "chris",
    "phone": {
        "device": "a", 
        "brand": "a"
     }
   }
}

как сделать так, как ожидается результат?

1 Ответ

0 голосов
/ 10 ноября 2019

Содержимое phone уже является JSON. Преобразование JSON в JSON приведет к экранированию кавычек, которые вы испытываете.

Решение состоит в том, чтобы превратить строку JSON phone в dict, сначала используя json.loads), прежде чем преобразовать merged в JSON.

import json

merged = {
  "data": {
    "id" : 1,
    "user" : "chris",
    "phone": "{\"device\": \"a\", \"brand\": \"a\"}"
   }
}

merged['data']['phone'] = json.loads(merged['data']['phone'])

print(json.dumps(merged, indent=4))

Вывод:

{
    "data": {
        "id": 1,
        "user": "chris",
        "phone": {
            "device": "a",
            "brand": "a"
        }
    }
}

Конечно, это предполагает, что phone всегда является допустимым JSON, в противном случае json.loads завершится неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...