Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在scrapy管道中修改json_Python_Arrays_Json_Dictionary_Scrapy - Fatal编程技术网

Python 在scrapy管道中修改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",

如果我有一个json/字典(在一个粗糙的管道中),我将如何在开始时将所有内容添加到一个键中并去掉括号

[
  {
    "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)