Json 基本概念与数据格式转换

什么是 json ?

在 WEB 应用系统开发以及数据分析中经常遇到 json 数据格式的文件,如下示意:

{
  "paramz": {
    "feeds": [
      {
        "id": 299080,
        "oid": 288342,
        "category": "article",
        "data": {
          "subject": "视频直播:习近平马英九会面",
          "summary": "两岸领导人习近平、马英九在新加坡会面",
          "cover": "/Attachs/Article/288342/56a263bcab4a4c55b0bef0528ce880b6_padmini.JPG",
          "pic": "",
          "format": "video",
          "changed": "2015-11-07 14:35:22"
        }
      },
      {
        "id": 299076,
        "oid": 288340,
        "category": "article",
        "data": {
          "subject": "荔枝新闻3.0:不止是阅读",
          "summary": "江苏广电旗下资讯类手机应用“荔枝新闻”于近期推出全新升级换代的3.0版。",
          "cover": "/Attachs/Article/288340/3e8e2c397c70469f8845fad73aa38165_padmini.JPG",
          "pic": "",
          "format": "txt",
          "changed": "2015-09-22 16:01:41"
        }
      }
    ],
    "PageIndex": 1,
    "PageSize": 20,
    "TotalCount": 53521,
    "TotalPage": 2677
  }
}

这种格式的数据有什么特点,代表什么含义,如何使用呢?

json 发音为 /ˈdʒeɪsən/ ,是 JavaScript Object Notation 的简称,它是一种传递对象的语法,对象可以是键值对 key/value 对,数组和其他对象。

json 的数据格式主要包括花括弧 {},方括弧 [],冒号 :和逗号 ,含义如下:

  • 花括弧 {} 表示一个“容器”

  • 方括号 [] 装载数组

  • 双引号“”表示的是属性值,属性和值之间用冒号 :隔开,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。

  • 数组元素通过逗号,隔开

json 与 CSV 格式的数据转换

python 中的实现

在 python 中实现 csv 转 json 格式的代码如下:

import csv
import json
 
file_path = "your_filePath.csv"
csvfile = open(file_path, 'r')
jsonfile = open('file.json', 'w')
 
fieldnames = ("Starting Station Latitude", "Starting Station Longitude", "Ending Station Latitude", "Ending Station Longitude")
 
reader = csv.DictReader( csvfile, fieldnames)
 
out = json.dumps( [ row for row in reader ] )
 
jsonfile.write(out)

R 中的实现

利用 R 语言做数据分析,通常数据结构是 dataframe ,可以利用 R 包 jsonlite 实现 dataframe 与 json 格式间的互换。

将 json 转为 dataframe 方式1

# 将 json 数据文件放置在当前文件夹下
# 加载 jsonlite 包,请事先安装好
library(jsonlite)

mydf <- fromJSON(file.json)

# 将 json 数据文件放置在当前文件夹下
# 加载 jsonlite 包,请事先安装好
library(jsonlite)

# 批量导入当前文件夹下json数据文件名,每个文件名以.json结尾
filelist <- list.files(pattern=".*.json")

# 查看文件个数
length(filelist)

# 当前系统时间
time1<-Sys.time()

# 利用fromJSON函数按照文件名列表读取文件
datalist <- lapply(filelist, function(x) fromJSON(x)) 

# 读取文件花费的时间
time2<-Sys.time()-time1
time2
Avatar
Wu, Jun
Associate professor
Next
Previous