首页 文章

两个json对象之间的逗号

提问于
浏览
-3

我正在从伪xml格式文件创建一个json文件 . 但是我在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)

第一个[]是因为 reviews = [] ,我可以手动删除它,但我也不想在我的json对象之间使用逗号 .

2 回答

  • 1

    您在问题中混合了一些概念!
    1.你拥有的不是 dict ,而是 listdicts .
    2.您的输入元素 list 既没有JSON,也没有预期输出

    现在想要解决方案,如果你想简单地 print 你的对象没有 comma 分开它们,所以你只需要 print 所有你的元素列表,你可以做什么:

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

    现在,如果您真正想要的是将其作为JSON对象进行操作,那么您有两个选项,使用 json lib:

    将样本中的每个元素添加为Json并单独操作它

    它们已经格式化为Json,因此您可以使用 json lib来操作它们以将字符串或任何其他操作完全打印( dumps ):

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

    使您的样本列表成为Json

    您可以将所有元素添加到单个 key 中,假设添加到名为 elementskey ,将会是:

    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 . 作为一个例子,我将创建一个计数器,计数器的每个数字将为特定的 element 定义不同的 key

    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 .

  • 4

    你要的是什么 is just not JSON . The standards,根据定义,指定对象之间必须有逗号 . 您有两种选择:

    • 更新解析器以符合标准(强烈推荐) .

    • 出于显示目的或您可能拥有的其他内部处理,如果您确实需要您指定的结构:捕获JSON对象并将其转换为其他内容,但请不要将其称为JSON,因为它不是 .

相关问题