使用python json模块的JSON解码器错误

时间:2018-11-05 14:10:27

标签: python json sdn

我有一个简单的子数据结构:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-parent</artifactId>
        <version>3.5.0-Final</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-annotations</artifactId>
    <packaging>jar</packaging>

    <name>Hibernate Annotations</name>
    <description>Annotations metadata for Hibernate</description>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
        </dependency>
        <dependency>
            <groupId>${groupId}</groupId>
            <artifactId>hibernate-testing</artifactId>
            <version>${version}</version>
            <scope>test</scope>
        </dependency>      
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <testResources>
            <testResource>
                <filtering>false</filtering>
                <directory>src/test/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </testResource>
            <testResource>
                <filtering>true</filtering>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jboss.maven.plugins</groupId>
                <artifactId>maven-test-ext-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jboss.maven.plugins</groupId>
                <artifactId>maven-injection-plugin</artifactId>
                <configuration>
                    <bytecodeInjections>
                        <bytecodeInjection>
                            <expression>${pom.version}</expression>
                            <targetMembers>
                              <methodBodyReturn>
                                  <className>org.hibernate.cfg.annotations.Version</className>
                                  <methodName>getVersionString</methodName>
                              </methodBodyReturn>
                            </targetMembers>
                        </bytecodeInjection>
                    </bytecodeInjections>
                </configuration>
            </plugin>            
            <plugin>
                <groupId>org.twdata.maven</groupId>
                <artifactId>maven-cli-plugin</artifactId>
                <version>0.6.4</version>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>jaxb</id>
            <activation>
                <jdk>1.5</jdk>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>javax.xml.bind</groupId>
                    <artifactId>jaxb-api</artifactId>
                    <version>2.1</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-impl</artifactId>
                    <version>2.1.3</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>doc</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.jboss.maven.plugins</groupId>
                        <artifactId>maven-jdocbook-plugin</artifactId>
                        <configuration>
                            <sourceDocumentName>master.xml</sourceDocumentName>
                            <sourceDirectory>${basedir}/src/main/docbook</sourceDirectory>
                            <masterTranslation>en</masterTranslation>
                            <imageResource>
                                <directory>${basedir}/src/main/docbook/en/images</directory>
                            </imageResource>
                        </configuration>
                        <executions>
                            <execution>
                                <id>make-doc</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>resources</goal>
                                    <goal>generate</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

我正尝试使用以下代码进行解析:

{
  "hostname": "CORESW01",
  "vendor": "Cisco",
  "isAlive": True,
  "uptime": 123456,
  "users": {
    "admin": 15,
    "storage": 10,
  },
  "vlans": [
    {
      "vlan_name": "VLAN30",
      "vlan_id": 30
    },
    {
      "vlan_name": "VLAN20",
      "vlan_id": 20
    }
  ]
}

执行代码时,出现以下错误:

import json

with open("json-example.json") as f:
    data = f.read()
json_dict = json.loads(data)

print("Now printing each item in this document and the type it contains")



for k, v in json_dict.items():
    print("-- The key {0} contains a {1} value.".format(str(k), str(type(v))))

有人可以帮助我诊断此故障吗?我尝试使用pub逐步检查代码,原因是我不清楚异常情况。

1 个答案:

答案 0 :(得分:5)

JSON中的布尔文字是小写的truefalse,但是您使用的是Python大写文字:

...
"isAlive": True,
...

使用正确的小写字母代替:

...
"isAlive": true,
...

其中一个对象中还有一个逗号结尾:

...
"users": {
  "admin": 15,
  "storage": 10,
},
....

JSON不允许尾随逗号,您必须将其删除:

...
"users": {
  "admin": 15,
  "storage": 10
},
....

您的完整JSON应该如下所示:

{
  "hostname": "CORESW01",
  "vendor": "Cisco",
  "isAlive": true,
  "uptime": 123456,
  "users": {
    "admin": 15,
    "storage": 10
  },
  "vlans": [
    {
      "vlan_name": "VLAN30",
      "vlan_id": 30
    },
    {
      "vlan_name": "VLAN20",
      "vlan_id": 20
    }
  ]
}

这可以正确加载:

json.loads('''{
  "hostname": "CORESW01",
  "vendor": "Cisco",
  "isAlive": true,
  "uptime": 123456,
  "users": {
    "admin": 15,
    "storage": 10
  },
  "vlans": [
    {
      "vlan_name": "VLAN30",
      "vlan_id": 30
    },
    {
      "vlan_name": "VLAN20",
      "vlan_id": 20
    }
  ]
}''')
# {'hostname': 'CORESW01', 'vendor': 'Cisco', 'isAlive': True, 'uptime': 123456, 'users': {'admin': 15, 'storage': 10}, 'vlans': [{'vlan_name': 'VLAN30', 'vlan_id': 30}, {'vlan_name': 'VLAN20', 'vlan_id': 20}]}