Извлечь вложенный массив из файла JSONL - PullRequest
0 голосов
/ 19 июня 2020

Я извлекаю дополнительные поля из файла JSONL с помощью json2csv.py (скомпилированного с использованием twar c), и у меня возникают проблемы с извлечением некоторых текстовых полей, содержащихся в массиве. Это массив, и я хочу иметь возможность вытаскивать только текст хэштега.

"entities": {
      "hashtags": [
        {
          "text": "NoJusticeNoPeace",
          "indices": [
            65,
            82
          ]
        },
        {
          "text": "justiceforNaledi",
          "indices": [
            83,
            100
          ]
        },

Я могу добавить другие поля, в которых нет массивов, используя этот код:

python json2csv.py tweets_may.jsonl -e full_text retweeted_status.extended_tweet.full_text > testfull_text.csv

Однако я не могу понять, как вытащить массив или его элементы. Отдельный текст хэштега можно идентифицировать с помощью следующего retweeted_status.extended_tweet.entities.hashtags.0.text, которое я пробовал использовать:

python json2csv.py tweets_may.jsonl -e all_hashtags retweeted_status.extended_tweet.entities.hashtags.0.text > testhash.csv

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

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

json модуль: json кодировщик и декодер

JSON (JavaScript обозначение объекта), определено РФ C 7159 (который устарел RF C 4627) и ECMA-404, это облегченный формат обмена данными, основанный на синтаксисе литерала объекта JavaScript (хотя он не является строгим подмножеством JavaScript 1) ...

Прошу вас просмотреть и прочитать больше в python документации json модуль декодера кодировщика

после моего комментария, модуля json и json.load() сделает всю работу за вас. просто импортируйте его и вызовите его API.

, если вы используете python 3.xx:

import json
import pprint
json_file_path="t.json"

json_data = {}

with open(json_file_path,'r') as jp:
    json_data=json.load(jp)
    pprint.pprint(json_data)
    # sinse hashtags is a list (json array) we access its elements like:
    var = json_data['entities']['hashtags'][0]['text']
    print("var is : {}".format(var))
    print("var type is : {}".format(type(var)))    

python 3.xx консольный вывод вышеуказанного кода

{'entities': {'hashtags': [{'indices': [65, 82], 'text': 'NoJusticeNoPeace'},
                           {'indices': [83, 100], 'text': 'justiceforNaledi'}]}}
var is : NoJusticeNoPeace
var type is : <class 'str'>

в python 2.xx единственное изменение - исключить парнетезы в строках печати. но есть одно существенное различие между выходными данными приведенного выше сценария.

на python 3 тип словаря str. который готов к использованию. но в python 2 элементы словаря имеют тип: <type 'unicode'>. так что имейте в виду. вам нужно преобразовать его в str, просто сделав это: str(var)

0 голосов
/ 20 июня 2020

Как уже сказал Адам, вы можете просто использовать модуль json для доступа к таким файлам.

Например, если у меня в file.jsonl есть следующее:

{
    "entities": {
        "hashtags": [
            {
            "text": "NoJusticeNoPeace",
            "indices": [
                65,
                82
            ]
            },
            {
            "text": "justiceforNaledi",
            "indices": [
                83,
                100
            ]
            }
        ]
    }
}

Чтобы получить доступ к информации, хранящейся в этом файле, вы можете сделать следующее:

import json

with open('file.jsonl','r') as file:
    jsonl = json.load(file)

Эта переменная jsonl теперь просто словарь, к которому вы можете получить доступ, как обычно.

hashtags = jsonl['entities']['hashtags']
print(hashtags[0]['text'])
>>> NoJusticeNoPeace
print(hashtags[1]['indices'])
>>> [83, 100]
...