выполните цикл по каждой строке в файле json и отфильтруйте результат

#python #json #dataframe

#питон #json #фрейм данных

Вопрос:

Привет, у меня есть файл json, который содержит что-то, как показано ниже. Я хочу написать код, чтобы просмотреть каждую строку в файле и отфильтровать элементы «emoji»: «1» и вывести результат в другой файл json.

Ввод

 {"o": [{"item": {"emoji": "0"}}]} {"p": [{"item": {"emoji": "1"}}]} {"q": [{"item": {"emoji": "1"}}]} {"r": [{"item": {"emoji": "0"}}]}  

Выход

 {"p": [{"item": {"emoji": "1"}}]} {"q": [{"item": {"emoji": "1"}}]}  

Комментарии:

1. Пожалуйста, объясните, как ваш вопрос связан с dataframe тегом, который вы использовали

2. Что вы пробовали и в чем проблема? поделитесь кодом, пожалуйста.

3. Это не файл json, а файл, содержащий строки json… Прочитайте файл построчно, преобразуйте строку в диктант(скажем data ) с json.loads помощью, а затем изучите data.values[0] или более точно data.values[0]['item']['emoji']

4. grep -hnr -A2 -B2 --no-group-separator "{"emoji": "1"}" /input.json gt; output.json

Ответ №1:

Самый простой способ работы со структурой ваших данных json-это выполнить итерацию по всем строкам файла и проверить, есть ли в строке определенная строка:

 filtered_json = [] with open('data.json', 'r') as file:  for line in file:  if '"emoji": "1"' in line:  filtered_json.append(line)  

это, конечно, немного неаккуратно, но это будет быстрое решение.

теперь вы можете написать filtered_json с:

 with open('new_data.json', 'w') as file:  new_data = 'n'.join(filtered_json)  file.write(new_data)  

Более сложным способом работы с вашими данными json было бы использование json пакета:

 import json filtered_json = [] with open('data', 'r') as file:  for line in file:  j = json.loads(line)  if int(j[list(j.keys())[0]][0]['item']['emoji']) == 1:  filtered_json.append(j)  

это довольно плохо, и запись данных в файл также будет странной.


мы можем сделать это намного лучше, изменив ваши данные json в фактический формат json:

старые данные.json:

 {"q": [{"item": {"emoji": "1"}}]} {"r": [{"item": {"emoji": "0"}}]}  

новые данные.json:

 {  "r": {"item": {"emoji": 0}},  "q": {"item": {"emoji": 1}} }  

Теперь мы можем использовать этот новый файл data.json более простым способом, работая с json пакетом:

 import json with open('data.json', 'r') as file:  j = json.load(file)  filtered_json = {}  for key in j.keys():  if j[key]['item']['emoji'] == 1:  filtered_json[key] = j[key]  

Изменив файл json, мы получили гораздо более простой код. Мы даже можем использовать такое понимание диктанта, как это:

 with open('data.json', 'r') as file:  j = json.load(file)  filtered_data = {k: v for k, v in j.items() if v['item']['emoji'] == 1}  

что, вероятно, является самым питоническим способом сделать это


Вы можете написать filtered_json сюда, просто позвонив:

 with open('new_data.json', 'w') as file:  json.dump(filtered_json, file)