Запятые между двумя объектами json - PullRequest
0 голосов
/ 09 декабря 2018

Я создаю файл json из файла формата псевдо-xml.Однако я получаю запятые между объектом JSON, которые я не хочу.

Это пример того, что я получаю:

[{"a": a , "b": b } , {"a": a , "b": b }]

Однако я хочу это:

{"a": a , "b": b } {"a": a , "b": b }

Возможно, это не правильный JSON, но я хочу это таким образомтак что я могу перетасовать его, выполнив:

shuf -n 100000 original.json > sample.json

в противном случае это будет просто одна большая строка json

Это мой код:

def read_html_file(file_name):
    f = open(file_name,"r", encoding="ISO-8859-1")
    html = f.read()
    parsed_html = BeautifulSoup(html, "html.parser")
    return parsed_html

def process_reviews(parsed_html):
    reviews = []
    for r in parsed_html.findAll('review'):
        review_text = r.find('review_text').text
        asin = r.find('asin').text
        rating = r.find('rating').text
        product_type = r.find('product_type').text
        reviewer_location = r.find('reviewer_location').text
        reviews.append({
            'review_text': review_text.strip(),
            'asin': asin.strip(),
            'rating': rating.strip(),
            'product_type': product_type.strip(),
            'reviewer_location': reviewer_location.strip()
        })

    return reviews

def write_json_file(file_name, reviews):
    with open('{f}.json'.format(f=file_name), 'w') as outfile:
        json.dump(reviews, outfile)

if __name__ == '__main__':
    parser = optparse.OptionParser()
    parser.add_option('-f', '--file_name',action="store", dest="file_name",
    help="name of the input html file to parse", default="positive.html")
    options, args = parser.parse_args()
    file_name = options.file_name

    html = read_html_file(file_name)
    reviews_list = process_reviews(html)
    write_json_file(file_name,reviews_list)

first [] из-за reviews = [], и я могу удалить его вручную, но я также не хочу запятых между моим объектом json.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Есть несколько концепций, которые вы смешиваете по своему вопросу!
1.То, что у вас есть, это не dict, а list из dicts.
2.У вас нет JSON, ни на входном элементе list, ни на ожидаемом выходе

Теперь идем к решению, если вы хотите просто print свои объекты без comma их разделения, так что вам нужно всего лишь print список всех ваших элементов, что вы можете сделать с помощью:

sample = [{"a": "a" , "b": "b" } , {"a": "a" , "b": "b" }]
print(" ".join([str(element) for element in sample]))

Теперь, если вы действительно хотите манипулировать им как объектом JSON, у вас есть две опции,используя json lib:

Добавьте каждый элемент из вашего sample как Json и управляйте им по отдельности

Они уже отформатированы как Json, поэтому вы можете манипулировать ими, используя json lib to pretty print (dumps) в виде строк или любых других манипуляций:

import json    
for element in sample:
        print(json.dumps(element, indent = 4))

Сделайте ваш список образцов JSON

Вы можете добавить все свои элементы в один key, скажем, добавив к key с именем elements, что будет:

sample_json = {"elements": []}
for data in sample:
    sample_json["elements"].append(data)
# Output from sample_json
# {'elements': [{'a': 'a', 'b': 'b'}, {'a': 'a', 'b': 'b'}]}

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

sample_json = {}
counter = 0
for data in sample:
    sample_json[counter] = data
    counter += 1
# Output from sample_json
# {0: {'a': 'a', 'b': 'b'}, 1: {'a': 'a', 'b': 'b'}}

Вы также можете использовать текст keys, дляэто второй случай.

0 голосов
/ 09 декабря 2018

То, что вы просите , просто не JSON . Стандарты по определению указывают, что между объектами должна быть запятая.У вас есть два варианта продвижения вперед:

  1. Обновите ваш парсер, чтобы он соответствовал стандартам (настоятельно рекомендуется).
  2. Для целей отображения или другой внутренней обработки, которая может у вас возникнуть, на случай, если выдействительно нужно указанную вами структуру: захватить объект JSON и преобразовать его во что-то другое, но, пожалуйста, не называйте это JSON, потому что это не так.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...