两个json对象之间的逗号

我正在从伪 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 对象之间有逗号。


长风秋雁
浏览 311回答 2
2回答

慕田峪4524236

您要的不是 JSON。根据定义,标准规定对象之间必须有逗号。您有两种选择可以继续:更新您的解析器以符合标准(强烈推荐)。出于显示目的或您可能有的其他内部处理目的,如果您真的想要您指定的结构:捕获 JSON 对象并将其转换为其他内容,但请不要将其称为 JSON,因为它不是。

哈士奇WWW

您在问题中混合了一些概念!1.你有什么不是dict,而是list的dicts。2. 你的输入元素list和预期的输出都没有 JSON现在寻求解决方案,如果您想简单地print将对象comma分开而不将它们分开,那么您只需要print列出所有元素,您可以做什么:sample = [{"a": "a" , "b": "b" } , {"a": "a" , "b": "b" }]print(" ".join([str(element) for element in sample]))现在,如果您真正想要的是将其作为 JSON 对象进行操作,您有两种选择,使用jsonlib:将您的每个元素添加sample为 Json 并单独操作它们已经格式化为 Json,因此您可以使用jsonlib操作它们以将( 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 = 0for data in sample:    sample_json[counter] = data    counter += 1# Output from sample_json# {0: {'a': 'a', 'b': 'b'}, 1: {'a': 'a', 'b': 'b'}}keys对于第二种情况,您也可以使用文本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python