JSon数据格式和操作

JSON是一种轻量级的数据转换格式,json文件占带宽比XML文件小。
常规操作包括生成JSON字符串、解析JSON字符串

JSON建构于两种结构:

1. "名称/值"对的集合(A collection of name/value pairs)。
    不同的语言中,它被理解为对象(object),
           记录(record),结构(struct),字典(dictionary),
           哈希表(hash table),有键列表(keyed list),
          或者关联数组 (associative array)。
2. 值的有序列表(An ordered list of values)。
        在大部分语言中,它被理解为数组(array)。 
规则:
        1)映射用冒号(“:”)表示。名称:值  
        2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2  
        3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}  
        4) 并列数据的集合(数组)用方括号(“[]”)表示
            {} 双括号表示对象
            [] 中括号表示数组
        一个JSON数组——JSONArray
            [{"name":"胡小" , "age":26 , "male":true},{"name":"赵小" , "age":27 , "male":false}]

R 语言中的JSON处理

install.packages("rjson") --包含 fromJSON(), newJSONParser(), toJSON()
# 加载包
   library("rjson")
# Give the input file name to the function.
    result <- fromJSON(file = "inputfile.json")
    print(result)
# 数据类型转换    
    json2data_frame <- as.data.frame(result)

Python中JSON

I、自带的包  import json
    01.把一个Python对象编码转换成Json字符串
            json.dumps( )方法对简单数据类型
            自定义类型的数据结构,json模块默认是没法处理的,会抛出异常:TypeError xx is not JSON serializable
                此时你需要自定义一个转换函数:
    02.Json格式字符串解码转换成Python对象
            json.loads( )
        dumps是将dict转化成str格式,loads是将str转化成dict格式
IIpandas中的JSON
    如果是Seriesjsonto_json() 
            默认的orient'index'
            orient可选参数有 {'split', 'records','index'}
    如果是DataFramejson
        默认的orient'columns'
            orient可选参数有 {'split','records','index','columns','values'}

    json的格式如下 
        split      dict like 样式为 {index -> [index], columns -> [columns], data -> [values]}
        records    list like   样式为  [{column -> value},  , {column -> value}]
        index  dict like   样式为 {index -> {column -> value}}
        columnsdict like   样式为 {index -> {column -> value}}
        values 样式 just the values array 
        table      dict like   样式为{'schema': {schema}, 'data': {data}},和records类似
    保存数据
            df.to_json(filename):以Json格式导出数据到文本文件

Java/Scala中的JSON解析

01.jackson
       jackson-core-2.2.3.jar(核心jar包)jackson-annotations-2.2.3.jar(该包提供Json注解支持)
      jackson-databind-2.2.3.jar
    JSON的三种处理方式 
    Jackson提供了三种可选的JSON处理方法(一种方式及其两个变型):
      001.流式 API:(也称为"增量分析/生成" 读取和写入 JSON 内容作为离散事件。
            org.codehaus.jackson.JsonParser 读,  org.codehaus.jackson.JsonGenerator 写。  
      002.树模型 :提供一个 JSON 文档可变内存树的表示形式。      
            org.codehaus.jackson.map.ObjectMapper 生成树 ;树组成 JsonNode 节点集。
            树模型类似于 XML DOM
     003.数据绑定: JSONPOJO相互转换,基于属性访问器规约或注解。
         两种变体: 简单  完整 的数据绑定:
        简单数据绑定: 是指从Java MapListStringNumbersBoolean和空值进行转换
        完整数据绑定 :是指从任何 Java bean 类型 (及上文所述的"简单"类型) 进行转换  
            org.codehaus.jackson.map.ObjectMapper 对两个变种,   
            进行编组(marshalling )处理 (写入 JSON 和反编组(unmarshalling ,读 JSON)。
        引入:
    * ObjectMapperJSON操作的核心
    * JacksonJSON操作在ObjectMapper中实现
    User user = new User();
    ObjectMapper mapper = new ObjectMapper();
    //User类转JSON
    //输出结果:{"name":"zhanli","age":19,"birthday":82300,"email":"zhanli@163.com"}
      String json = mapper.writeValueAsString(user);
      System.out.println(json);
    //mapper.readValue
02.fasterjson
    引用: import com.alibaba.fastjson.JSON
    //序列化
    JSON.toJSONString       把对象o转化为JSON格式的文本
    JSON.toJSONBytes
    //信息反序列化
    JSON.parseObject(jsonString, Object.class);  
    // 将json字符串转成一个对象
    JSON.parseArray
    eg:
      val jsonObj  = JSON.parseObject(firstloor)
      val test02     = JSON.parseObject(jsonObj.getString("jsonData02"))
      JSON.parseObject(test02.get("level3").toString)

常用数据数据源:

常用的数据文件格式:  csv txt  xls xlsx
常用的数据转换格式:  json  xml html
常用的数据存储方式:  数据库

参考:

pandas.DataFrame.to_json按行转json  http://blog.csdn.net/huanbia/article/details/72674832

blogroll

social