• Python json格式处理


    Python json格式处理

    首先放一段代码

    import requests
    import jsonpath
    import json
    f=open('ip.txt','r',encoding='utf-8')
    for my_ip in f.readlines():
        my_ip=str(my_ip[:-1])
        respons=requests.get('http://ip-api.com/json/{ip}?lang=zh-CN'.format(ip=my_ip)).json()
        countr=jsonpath.jsonpath(respons,"$..country")
        sheng=jsonpath.jsonpath(respons,"$..regionName")
        cit=jsonpath.jsonpath(respons,"$..city")
        ipip=jsonpath.jsonpath(respons,"$..query")
        print(respons)
        print(countr+sheng+cit+ipip)
    

    Json 定义

    JSON: JavaScript Object Notation(JavaScript 对象表示法)
    JSON 是存储和交换文本信息的语法。类似 XML。
    JSON 比 XML 更小、更快,更易解析。
    

    1.json moudle使用

    Python与JSON数据类型对应表:
    PythonJSON说明
    dict object 字典
    list, tuple array 序列
    str string 字符串
    int, float number 数字类型
    True true 布尔值True
    False false 布尔值 False
    None null 空值

    既然知道了为什么要转换,就来了解怎么转换,这就需要用到Python的内置模块json,内置模块,在代码中直接引用即可:

    import json
    

    json模块中主要用到的就4个函数:

    json.dumps(): 将Python数据编码(转换)为JSON数据; json.loads(): 将JSON数据转换(解码)为Python数据; json.dump(): 将Python数据编码并写入JSON文件; json.load(): 从JSON文件中读取数据并解码。

    2.jsonpath的运用

    JsonPath与XPath语法对比:

    Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

    XpathJSONPath描述
    / $ 跟节点
    . @ 现行节点
    / . or [] 取子节点
    .. n/a 就是不管位置,选择所有符合条件的条件
    * * 匹配所有元素节点
    [] [] 迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
    &#124 [,] 支持迭代器中做多选
    [] ?() 支持过滤操作
    n/a () 支持表达式计算
    () n/a 分组,JsonPath不支持

    注意事项:

    json.loads()是把Json格式字符串解码转换成Python对象,如果在json.loads的时候出错,要注意被解码的Json字符的编码。

    字符串编码转换

    任何平台的任何编码,都能和Unicode互相转换。

    UTF-8与GBK互相转换,那就先把UTF-8转换成Unicode,再从Unicode转换成GBK,反之同理。

    # 这是一个 UTF-8 编码的字符串
    utf8Str = "你好地球"
    
    # 1. 将 UTF-8 编码的字符串 转换成 Unicode 编码
    unicodeStr = utf8Str.decode("UTF-8")
    
    # 2. 再将 Unicode 编码格式字符串 转换成 GBK 编码
    gbkData = unicodeStr.encode("GBK")
    
    # 1. 再将 GBK 编码格式字符串 转化成 Unicode
    unicodeStr = gbkData.decode("gbk")
    
    # 2. 再将 Unicode 编码格式字符串转换成 UTF-8
    utf8Str = unicodeStr.encode("UTF-8")
    
    所有的胜利,与征服自己的胜利比起来,都是微不足道;所有的失败,与失去自己的失败比起来,更是微不足道。
  • 相关阅读:
    [bigdata] storm集群安装及测试
    [bigdata] kafka集群安装及测试
    [bigdata] spark集群安装及测试
    [bigdata] 使用Flume hdfs sink, hdfs文件未关闭的问题
    [bigdata] 启动CM出现 “JDBC Driver class not found: com.mysql.jdbc.Driver” 以及“Error creating bean with name 'serverLogFetcherImpl'”问题的解决方法
    [JavaEE]设计模式之SOLID原则
    [Android]Volley源码分析(五)
    [Android]Volley源码分析(四)
    [Android]Volley源码分析(三)
    python学习Day13--生成函数
  • 原文地址:https://www.cnblogs.com/8gman/p/12303803.html
Copyright © 2020-2023  润新知