首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON数据解析为Python

将JSON数据解析为Python
EN

Stack Overflow用户
提问于 2013-12-10 06:51:58
回答 2查看 246关注 0票数 0

我有一个JSON文件,其中包含一些我需要的数据。我想写一个python程序来读取它并获取信息。有什么帮助吗?

下面是JSON的一个示例

代码语言:javascript
复制
var case_data = {
  "cases": {
    "1": {
      "amount": 1500.0, 
      "case_id": "1", 
      "case_name": "US v. Control Systems Specialist, Inc. and Darrold Richard Crites", 
      "country": "br", 
      "sector": "sector-defense"
    }, 
    "10": {
      "amount": 0.0, 
      "case_id": "10", 
      "case_name": "SEC v. Int'l Systems & Controls Corp.", 
      "country": "cl", 
      "sector": "sector-agriculture"
    }
  }, 
  "countries": {
    "ae": {
      "cases": [
        "191", 
        "192", 
        "193", 
        "282", 
        "332"
      ], 
      "sectors": {
        "sector-consulting": {
          "total": 1812113.33
        }, 
        "sector-energy": {
          "total": 6622147.0
        }, 
        "sector-infrastructure": {
          "total": 4694551.0
        }
      }, 
      "total": 13128811.33, 
      "tree": {
        "children": [
          {
            "children": [], 
            "classname": "sector-energy", 
            "data": {
              "$amount": 4550000.0, 
              "$area": 3
            }, 
            "id": "191", 
            "name": "Control Components Inc. et al."
          }, 
          {
            "children": [], 
            "classname": "sector-infrastructure", 
            "data": {
              "$amount": 140551.0, 
              "$area": 2
            }, 
            "id": "192", 
            "name": "Textron Inc."
          }, 
          {
            "children": [], 
            "classname": "sector-infrastructure", 
            "data": {
              "$amount": 4554000.0, 
              "$area": 3
            }, 
            "id": "193", 
            "name": "York International Corp."
          }, 
          {
            "children": [], 
            "classname": "sector-consulting", 
            "data": {
              "$amount": 1812113.33, 
              "$area": 3
            }, 
            "id": "282", 
            "name": "Aon Corporation"
          }, 
          {
            "children": [], 
            "classname": "sector-energy", 
            "data": {
              "$amount": 2072147.0, 
              "$area": 3
            }, 
            "id": "332", 
            "name": "Tyco Int\u2019l Ltd. et al."
          }
        ], 
        "data": {
          "$amount": 0, 
          "$area": 14
        }, 
        "id": "ae", 
        "name": "UAE"
      }
    }, 
    "ao": {
      "cases": [
        "5", 
        "9", 
        "207", 
        "208", 
        "209"
      ], 
      "sectors": {
        "sector-consulting": {
          "total": 12350000.0
        }, 
        "sector-energy": {
          "total": 18097043.0
        }, 
        "sector-telecom": {
          "total": 7080000.0
        }
      }, 
      "total": 37527043.0, 
      "tree": {
        "children": [
          {
            "children": [], 
            "classname": "sector-energy", 
            "data": {
              "$amount": 302043.0, 
              "$area": 2
            }, 
            "id": "5", 
            "name": "ABB Ltd. et al."
          }, 
          {
            "children": [], 
            "classname": "sector-energy", 
            "data": {
              "$amount": 16335000.0, 
              "$area": 6
            }, 
            "id": "9", 
            "name": "Baker Hughes Inc. et al."
          }, 
          {
            "children": [], 
            "classname": "sector-energy", 
            "data": {
              "$amount": 1460000.0, 
              "$area": 3
            }, 
            "id": "207", 
            "name": "GlobalSanteFe Corp."
          }, 
          {
            "children": [], 
            "classname": "sector-telecom", 
            "data": {
              "$amount": 7080000.0, 
              "$area": 3
            }, 
            "id": "208", 
            "name": "Alcatel-Lucent S.A. et al."
          }, 
          {
            "children": [], 
            "classname": "sector-consulting", 
            "data": {
              "$amount": 12350000.0, 
              "$area": 6
            }, 
            "id": "209", 
            "name": "Panalpina World Transport (Holding) Ltd. et al."
          }
        ], 
        "data": {
          "$amount": 0, 
          "$area": 20
        }, 
        "id": "ao", 
        "name": "Angola"
      }
    }, 
  };

我想提取每个国家“部门-能源”后面的数字。请注意,在此示例文件中,有两个国家/地区'ae‘和'ao’。

EN

回答 2

Stack Overflow用户

发布于 2013-12-10 07:17:00

如果你真的有JSON。您所能做的就是使用json模块将其解码为本机dict,就像使用JavaScript中的JSON对象将其解码为本机object一样。比较这个JS:

代码语言:javascript
复制
var case_data = JSON.parse(data);

…等效于Python:

代码语言:javascript
复制
case_data = json.loads(data)

完成此操作后,就不再需要担心JSON了;它只是普通的本机对象,您可以像访问字典、列表、字符串和数字的任何其他组合一样访问这些对象。例如:

代码语言:javascript
复制
sector_energy = [country["sectors"]["sector-energy"] 
                 for country in case_data["countries"]]

但是,您向我们展示的根本不是JSON;它是JavaScript源代码,它将一个复杂的对象赋给一个变量。您不能在任何语言中将其解析为JSON,因为它不是。

当然,=;之间的源代码部分不仅是有效的JavaScript代码,也是有效的JSON。就此而言,它也是有效的Python和有效的Ruby。但是,如果您想要解析这个文件和其他类似的文件,则需要制定规则,以确定哪些片段代表您想要解析的JSON。每个文件是否只有一个JS变量赋值?或者是其他的东西?

无论如何,实际上使用JSON进行语言之间的交换要好得多,而不是使用某种类似JSON的东西并希望它能正常工作。

票数 3
EN

Stack Overflow用户

发布于 2013-12-10 06:54:39

Python已经为此提供了一个库

http://docs.python.org/3.3/library/json.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20482546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档