JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,是一种结构语言,是常用的APIs格式之一(application programming interfaces)。 语法形式有点像C语言等,主要格式是“firstName”:“John”.
JSON 数据的书写格式是:名称/值对。名称/值对组合中的名称写在前面(在双引号中),值 对写在后面(同样在双引号中),中间用冒号隔开:
"firstName":"John" 这很容易理解,等价于这条 JavaScript 语句:firstName="John"
JSON 值
+ JSON 值可以是:
+ 数字(整数或浮点数)
+ 字符串(在双引号中)
+ 逻辑值(true 或 false)
+ 数组(在方括号中)
+ 对象(在花括号中)
+ null
示列如下:
{
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
}
library(knitr)
library(jsonlite)
jsonData <- fromJSON("https://api.github.com/users/jtleek/repos")
class(jsonData)
## [1] "data.frame"
library(pryr)
otype(jsonData)
## [1] "S3"
names(jsonData)
## [1] "id" "name" "full_name"
## [4] "owner" "private" "html_url"
## [7] "description" "fork" "url"
## [10] "forks_url" "keys_url" "collaborators_url"
## [13] "teams_url" "hooks_url" "issue_events_url"
## [16] "events_url" "assignees_url" "branches_url"
## [19] "tags_url" "blobs_url" "git_tags_url"
## [22] "git_refs_url" "trees_url" "statuses_url"
## [25] "languages_url" "stargazers_url" "contributors_url"
## [28] "subscribers_url" "subscription_url" "commits_url"
## [31] "git_commits_url" "comments_url" "issue_comment_url"
## [34] "contents_url" "compare_url" "merges_url"
## [37] "archive_url" "downloads_url" "issues_url"
## [40] "pulls_url" "milestones_url" "notifications_url"
## [43] "labels_url" "releases_url" "created_at"
## [46] "updated_at" "pushed_at" "git_url"
## [49] "ssh_url" "clone_url" "svn_url"
## [52] "homepage" "size" "stargazers_count"
## [55] "watchers_count" "language" "has_issues"
## [58] "has_downloads" "has_wiki" "has_pages"
## [61] "forks_count" "mirror_url" "open_issues_count"
## [64] "forks" "open_issues" "watchers"
## [67] "default_branch"
names(jsonData$owner) #jsonData$owner还是一个data.frame
## [1] "login" "id" "avatar_url"
## [4] "gravatar_id" "url" "html_url"
## [7] "followers_url" "following_url" "gists_url"
## [10] "starred_url" "subscriptions_url" "organizations_url"
## [13] "repos_url" "events_url" "received_events_url"
## [16] "type" "site_admin"
class(jsonData$owner)
## [1] "data.frame"
jsonData$owner$login
## [1] "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek"
## [8] "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek"
## [15] "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek"
## [22] "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek" "jtleek"
## [29] "jtleek" "jtleek"
flattern(x,recursive = TRUE)
x a data frame
recursive flatten recursively
class(flatten(jsonData))
df=flatten(jsonData)
str(df)
which(names(df)=="html_url",arr.ind = T)
which(names(jsonData)=="html_url",arr.ind = T)
myjson <- toJSON(iris, pretty=TRUE)
#cat(myjson) #输出符合JSON格式的文档
#convert json back to object
iris2 <- fromJSON(myjson)
print(head(iris2))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa