更多pythonic方法从元组列表格式化JSON字符串

时间:2012-12-07 10:16:40

标签: python json list tuples

目前我正在这样做:

def getJSONString(lst):
    join = ""
    rs = "{"
    for i in lst:
        rs += join + '"' + str(i[0]) + '":"' + str(i[1]) + '"'
        join = ","
    return rs + "}"

我称之为:

rs = getJSONString([("name", "value"), ("name2", "value2")])

它不需要嵌套(它只是一个简单的名称值对列表)。但我愿意以不同的方式调用函数。这一切看起来有点笨拙,有更优雅的方式吗?这需要在2.x下运行。

请注意,这不是重复:Python - convert list of tuples to string(除非可以修改该答案以创建JSON字符串作为输出)。

编辑:将名称值对作为字典传递会更好吗?

4 个答案:

答案 0 :(得分:20)

有一种更好的方法来生成JSON字符串:json module

import json
rs = json.dumps(dict(lst))

这利用了dict()可以采用一系列键值对(双值元组)并将其转换为映射的事实,json模块直接转换为JSON对象结构。

演示:

>>> import json
>>> lst = [("name", "value"), ("name2", "value2")]
>>> rs = json.dumps(dict(lst))
>>> print rs
{"name2": "value2", "name": "value"}

答案 1 :(得分:1)

(lambda lst: json.dumps({item[0]:item[1] for item in lst}))([(1,2), (3,4)])

答案 2 :(得分:0)

您可以将其转换为一个完整的json内容

import ast
import json

stli = '[(\'Rated 4.0\', \'RATED\\n  A beautiful place to dine in.The interiors take you back to the Mughal era. The lightings are just perfect.We went there on the occasion of Christmas and so they had only limited items available. But the taste and service was not compromised at all.The only complaint is that the breads could have been better.Would surely like to come here again.\'), (\'Rated 4.0\', \'RATED\\n  I was here for dinner with my family on a weekday. The restaurant was completely empty. Ambience is good with some good old hindi music. Seating arrangement are good too. We ordered masala papad, panner and baby corn starters, lemon and corrionder soup, butter roti, olive and chilli paratha. Food was fresh and good, service is good too. Good for family hangout.\\nCheers\'), (\'Rated 2.0\', \'RATED\\n  Its a restaurant near to Banashankari BDA. Me along with few of my office friends visited to have buffet but unfortunately they only provide veg buffet. On inquiring they said this place is mostly visited by vegetarians. Anyways we ordered ala carte items which took ages to come. Food was ok ok. Definitely not visiting anymore.\'), (\'Rated 4.0\', \'RATED\\n  We went here on a weekend and one of us had the buffet while two of us took Ala Carte. Firstly the ambience and service of this place is great! The buffet had a lot of items and the good was good. We had a Pumpkin Halwa intm the dessert which was amazing. Must try! The kulchas are great here. Cheers!\'), (\'Rated 5.0\', \'RATED\\n  The best thing about the place is itÃ\x83Â\x82Ã\x82Â\x92s ambiance. Second best thing was yummy ? food. We try buffet and buffet food was not disappointed us.\\nTest ?. ?? ?? ?? ?? ??\\nQuality ?. ??????????.\\nService: Staff was very professional and friendly.\\n\\nOverall experience was excellent.\\n\\nsubirmajumder85.wixsite.com\'), (\'Rated 5.0\', \'RATED\\n  Great food and pleasant ambience. Expensive but Coll place to chill and relax......\\n\\nService is really very very good and friendly staff...\\n\\nFood : 5/5\\nService : 5/5\\nAmbience :5/5\\nOverall :5/5\'), (\'Rated 4.0\', \'RATED\\n  Good ambience with tasty food.\\nCheese chilli paratha with Bhutta palak methi curry is a good combo.\\nLemon Chicken in the starters is a must try item.\\nEgg fried rice was also quite tasty.\\nIn the mocktails, recommend "Alice in Junoon". Do not miss it.\'), (\'Rated 4.0\', \'RATED\\n  You canÃ\x83Â\x82Ã\x82Â\x92t go wrong with Jalsa. Never been a fan of their buffet and thus always order alacarteÃ\x83Â\x82Ã\x82Â\x92. Service at times can be on the slower side but food is worth the wait.\'), (\'Rated 5.0\', \'RATED\\n  Overdelighted by the service and food provided at this place. A royal and ethnic atmosphere builds a strong essence of being in India and also the quality and taste of food is truly authentic. I would totally recommend to visit this place once.\'), (\'Rated 4.0\', \'RATED\\n  The place is nice and comfortable. Food wise all jalea outlets maintain a good standard. The soya chaap was a standout dish. Clearly one of trademark dish as per me and a must try.\\n\\nThe only concern is the parking. It very congested and limited to just 5cars. The basement parking is very steep and makes it cumbersome\'), (\'Rated 4.0\', \'RATED\\n  The place is nice and comfortable. Food wise all jalea outlets maintain a good standard. The soya chaap was a standout dish. Clearly one of trademark dish as per me and a must try.\\n\\nThe only concern is the parking. It very congested and limited to just 5cars. The basement parking is very steep and makes it cumbersome\'), (\'Rated 4.0\', \'RATED\\n  The place is nice and comfortable. Food wise all jalea outlets maintain a good standard. The soya chaap was a standout dish. Clearly one of trademark dish as per me and a must try.\\n\\nThe only concern is the parking. It very congested and limited to just 5cars. The basement parking is very steep and makes it cumbersome\')]'

inputlist = list(ast.literal_eval(stli))

rs = json.dumps(dict(inputlist))

print(rs)

输出: {“ Rated 4.0”:“已评分\ n这个地方很好,很舒适。从美食角度来说,所有的jalea出口都保持良好的水准。黄豆酱是一道杰出的菜。显然,这是我的商标菜,必须尝试。\ n \ n唯一的问题就是停车位。它非常拥挤,只能停5辆车。地下室的停车位非常陡峭,笨拙。“,” Rated 2.0“:”已评级\ n它靠近Banashankari BDA的餐厅。我办公室的所有朋友都来这里享用自助餐,但不幸的是,他们只提供素食自助餐,经询问,他们说这个地方主要是素食者所来过的,无论如何,我们订购了点菜的菜,还花了很长时间,食物还可以,绝对不能再来了。 ”,“ 5.0级”:“评级\ n对这个地方提供的服务和食物感到不悦。皇家和种族的氛围营造出了在印度的强烈本质,而且食物的质量和口味都真正地道。我将完全建议一次访问这个地方。“}

答案 3 :(得分:0)

我认为这是一个非常简单的解决方案。 W3学校礼貌 https://www.w3schools.com/python/python_json.asp

import json

一些JSON:

x =  '{ "name":"John", "age":30, "city":"New York"}'

解析x:

y = json.loads(x)

结果是一个Python字典:

print(y["age"])