Python 在scrapy管道中修改json
如果我有一个json/字典(在一个粗糙的管道中),我将如何在开始时将所有内容添加到一个键中并去掉括号Python 在scrapy管道中修改json,python,arrays,json,dictionary,scrapy,Python,Arrays,Json,Dictionary,Scrapy,如果我有一个json/字典(在一个粗糙的管道中),我将如何在开始时将所有内容添加到一个键中并去掉括号 [ { "date":"2015-11-25", "threat_level_id":"1", "info":"TEST", "analysis":"0", "distribution":"0", "orgc":"Malware, Inc", "Attribute":[ { "type":"md5",
[
{
"date":"2015-11-25",
"threat_level_id":"1",
"info":"TEST",
"analysis":"0",
"distribution":"0",
"orgc":"Malware, Inc",
"Attribute":[
{
"type":"md5",
"category":"Payload delivery",
"to_ids":true,
"distribution":"3",
"value":"35b759347aee663e36f5b91877749349"
}
]
}
]
我想在它的开头加一个键,去掉括号,使它看起来像这样-
{
"Event":{
"date":"2015-11-25",
"threat_level_id":"1",
"info":"TEST",
"analysis":"0",
"distribution":"0",
"orgc":"Oxygen",
"Attribute":[
{
"type":"md5",
"category":"Payload delivery",
"to_ids":true,
"distribution":"3",
"value":"35b759347aee663e36f5b91877749349"
}
]
}
}
谢谢natdempk
我收到异常。TypeError:此文件上应为字符串或缓冲区-
class JsonPipeline(object):
def process_item(self, item, spider):
data = json.loads(item)
new_data = {}
new_data['Event'] = data
item = json.dumps(data)
return item
我在用这样的方式运行“刮痧爬虫”——
scrapy爬行爬行器-o items.json
这是可行的,但我得到了错误文件“/usr/lib/pymodules/python2.7/scrapy/contrib/exporter/init.py”,第71行,在_get_serialized_字段中
字段=项目。字段[字段名称]
exceptions.AttributeError:“dict”对象没有属性“fields”
class JsonWithEncodingPipeline(object):
def process_item(self, item, spider):
data = {}
data['Event'] = item
return data
如果我将其添加到settings.py,它会工作,但我不会获得文件输出??:(
有没有一种方法可以在不禁用FEEDEXPORTER的情况下执行此操作?您可以使用Python的
json
模块将json读入字典,然后修改该字典并将其再次导出为json
这可能看起来像:
import json
data = json.loads(your_json_data_as_string)
new_data = {}
new_data['Event'] = data
new_json_string = json.dumps(new_data)
这将产生类似于您想要的示例的内容,其中它将整个给定的json数据结构放在键
Event
下,将其读回,进行所需的修改,然后保存新数据…在上面进行了编辑,natdempk您肯定对其进行了改进!仍然得到我假设的json错误。还有其他想法吗?看起来像您的另一个问题可能与此相关:在阅读该问题的基础上,您可能试图将某些内容转换为JSON,而这些JSON不是可序列化的,例如Python datetime或其他内容。如果看不到您的数据,就很难说出是哪一部分数据导致了问题@mathurin68
import json
data = json.loads(your_json_data_as_string)
new_data = {}
new_data['Event'] = data
new_json_string = json.dumps(new_data)