我已将json数据结构存储在具有单列的数据框中,在R中名为 json_data 所以我的json文本以这种格式存储
row 1) { "results" : [ { "formatted_address" : "Sahibzada Ajit Singh Nagar,
Punjab, India", "types" : [ "route" ], "location" :"lat"31.1471305,"lng"
75.34121789999999 }, ]
row 2) { "results" : [ { "formatted_address" : "SAS Nagar, Chennai, India",
"types" : [ "route 2" ], "location" :"lat"30.67249,"lng" 23.988672537 ,}]
row 3) { "results" : [ { "formatted_address" : "Hind mata chowk, UP, India",
"types" : [ "route 4" ], "location" lat"48.973478983,"lng"64.982486763},]
row 4)
row 5)
.
.
.
.row 1000)
我想要实现的是想要从每一行格式化地址,lat,lng从位置访问并将它们保存到三个不同的列中,以便
formatted_add lat lng
Sahibzada Ajit Singh Nagar,Punjab, India 31.1471305 75.34121789999999
SAS Nagar, Chennai, India 30.67249 23.988672537
Hind mata chowk, UP, India 48.973478983 64.982486763
json_data_df是dataframe的名称
我正在尝试
formatted_add=json_data_df$json_data$formatted_address
lat=json_data_df$json_data$formatted_address$geometry$location$lat
lng=json_data_df$json_data$formatted_address$geometry$location$lng
请查看我已粘贴样本行的dput()的O / P,从该行我想要访问第一次出现的&#34; formatted_address&#34; 及其<在位置下强>&#34; lat&#34;&#34; lng&#34; 。但这并没有给我输出,有关应该做出哪些改变的任何建议。提前致谢
编辑:
dput(头(json_data_df,1))
0 \ P
{
"results": [{
"address_components": [{
"long_name": "Unnamed Road",
"short_name": "Unnamed Road",
"types": ["route"]
}, {
"long_name": "Sahibzada Ajit Singh Nagar",
"short_name": "SAS Nagar",
"types": ["administrative_area_level_2", "political"]
}, {
"long_name": "Punjab",
"short_name": "PB",
"types": ["administrative_area_level_1", "political"]
}, {
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}, {
"long_name": "160003",
"short_name": "160003",
"types": ["postal_code"]
}],
"formatted_address": "Unnamed Road, Punjab 160003, India",
"geometry": {
"bounds": {
"northeast": {
"lat": 30.6593213,
"lng": 76.7952105
},
"southwest": {
"lat": 30.6548837,
"lng": 76.7931289
}
},
"location": {
"lat": 30.6576094,
"lng": 76.794392
},
"location_type": "GEOMETRIC_CENTER",
"viewport": {
"northeast": {
"lat": 30.6593213,
"lng": 76.79551868029151
},
"southwest": {
"lat": 30.6548837,
"lng": 76.7928207197085
}
}
},
"place_id": "ChIJYWQws23rDzkRsqz31TNCwXg",
"types": ["route"]
}, {
"address_components": [{
"long_name": "Bhabat",
"short_name": "Bhabat",
"types": ["locality", "political"]
}, {
"long_name": "Sahibzada Ajit Singh Nagar",
"short_name": "SAS Nagar",
"types": ["administrative_area_level_2", "political"]
}, {
"long_name": "Punjab",
"short_name": "PB",
"types": ["administrative_area_level_1", "political"]
}, {
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}],
"formatted_address": "Bhabat, Punjab, India",
"geometry": {
"bounds": {
"northeast": {
"lat": 30.67249,
"lng": 76.81895999999999
},
"southwest": {
"lat": 30.64508,
"lng": 76.79106999999999
}
},
"location": {
"lat": 30.6575248,
"lng": 76.8057776
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 30.67249,
"lng": 76.81895999999999
},
"southwest": {
"lat": 30.64508,
"lng": 76.79106999999999
}
}
},
"place_id": "ChIJN3sGJEHrDzkRwGZ1GMXBa2Q",
"types": ["locality", "political"]
}, {
"address_components": [{
"long_name": "Chandigarh Airport Area",
"short_name": "Chandigarh Airport Area",
"types": ["political", "sublocality", "sublocality_level_1"]
}, {
"long_name": "Chandigarh",
"short_name": "Chandigarh",
"types": ["locality", "political"]
}, {
"long_name": "Chandigarh",
"short_name": "CH",
"types": ["administrative_area_level_1", "political"]
}, {
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}],
"formatted_address": "Chandigarh Airport Area, Chandigarh, India",
"geometry": {
"bounds": {
"northeast": {
"lat": 30.696639,
"lng": 76.81389089999999
},
"southwest": {
"lat": 30.6568821,
"lng": 76.76542999999999
}
},
"location": {
"lat": 30.6783321,
"lng": 76.7884713
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 30.696639,
"lng": 76.81389089999999
},
"southwest": {
"lat": 30.6568821,
"lng": 76.76542999999999
}
}
},
"place_id": "ChIJcb4-lILsDzkRJIQJTpsMm8w",
"types": ["political", "sublocality", "sublocality_level_1"]
}, {
"address_components": [{
"long_name": "160004",
"short_name": "160004",
"types": ["postal_code"]
}, {
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}],
"formatted_address": "160004, India",
"geometry": {
"bounds": {
"northeast": {
"lat": 30.6832516,
"lng": 76.8121771
},
"southwest": {
"lat": 30.6447985,
"lng": 76.7639648
}
},
"location": {
"lat": 30.6582706,
"lng": 76.7855866
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 30.6832516,
"lng": 76.8121771
},
"southwest": {
"lat": 30.6447985,
"lng": 76.7639648
}
}
},
"place_id": "ChIJf560w6fsDzkRXLKn0s52kHM",
"types": ["postal_code"]
}, {
"address_components": [{
"long_name": "Sahibzada Ajit Singh Nagar",
"short_name": "SAS Nagar",
"types": ["administrative_area_level_2", "political"]
}, {
"long_name": "Punjab",
"short_name": "PB",
"types": ["administrative_area_level_1", "political"]
}, {
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}],
"formatted_address": "Sahibzada Ajit Singh Nagar, Punjab, India",
"geometry": {
"bounds": {
"northeast": {
"lat": 30.9369199,
"lng": 76.9439199
},
"southwest": {
"lat": 30.35902,
"lng": 76.52444009999999
}
},
"location": {
"lat": 30.6496486,
"lng": 76.7567368
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 30.9369199,
"lng": 76.9439199
},
"southwest": {
"lat": 30.35902,
"lng": 76.52444009999999
}
}
},
"place_id": "ChIJOyhuuFPlDzkRzrRj0bvdZPw",
"types": ["administrative_area_level_2", "political"]
}, {
"address_components": [{
"long_name": "Punjab",
"short_name": "PB",
"types": ["administrative_area_level_1", "political"]
}, {
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}],
"formatted_address": "Punjab, India",
"geometry": {
"bounds": {
"northeast": {
"lat": 32.4994008,
"lng": 76.92175809999999
},
"southwest": {
"lat": 29.537147,
"lng": 73.88057999999999
}
},
"location": {
"lat": 31.1471305,
"lng": 75.34121789999999
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 32.4994008,
"lng": 76.92175809999999
},
"southwest": {
"lat": 29.537147,
"lng": 73.88057999999999
}
}
},
"place_id": "ChIJVXOeVqpkGTkRYYijAzEmvY8",
"types": ["administrative_area_level_1", "political"]
}, {
"address_components": [{
"long_name": "India",
"short_name": "IN",
"types": ["country", "political"]
}],
"formatted_address": "India",
"geometry": {
"bounds": {
"northeast": {
"lat": 35.5087008,
"lng": 97.39535869999999
},
"southwest": {
"lat": 6.4626999,
"lng": 68.1097
}
},
"location": {
"lat": 20.593684,
"lng": 78.96288
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 35.5087008,
"lng": 97.39498069999999
},
"southwest": {
"lat": 6.7535159,
"lng": 68.16288519999999
}
}
},
"place_id": "ChIJkbeSa_BfYzARphNChaFPjNc",
"types": ["country", "political"]
}],
"status": "OK"
}
row 2)
{ "results" : [ { "address_components" : [ { "long_name" : "Unnamed Road", "short_name" : "Unnamed Road", "types" : [ "route" ] }, { "long_name" : "Godown Area", "short_name" : "Godown Area", "types" : [ "neighborhood", "political" ] }, { "long_name" : "Chandigarh Airport Area", "short_name" : "Chandigarh Airport Area", "types" : [ "political", "sublocality", "sublocality_level_1" ] }, { "long_name" : "Chandigarh", "short_name" : "Chandigarh", "types" : [ "locality", "political" ] }, { "long_name" : "Sahibzada Ajit Singh Nagar", "short_name" : "SAS Nagar", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Chandigarh", "short_name" : "CH", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] }, { "long_name" : "140604", "short_name" : "140604", "types" : [ "postal_code" ] } ], "formatted_address" : "Unnamed Road, Godown Area, Chandigarh Airport Area, Chandigarh, 140604, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 30.6617314, "lng" : 76.81240459999999 }, "southwest" : { "lat" : 30.6611368, "lng" : 76.8107763 } }, "location" : { "lat" : 30.66141159999999, "lng" : 76.8115756 }, "location_type" : "GEOMETRIC_CENTER", "viewport" : { "northeast" : { "lat" : 30.66278308029149, "lng" : 76.81293943029151 }, "southwest" : { "lat" : 30.66008511970849, "lng" : 76.81024146970849 } } }, "place_id" : "ChIJBf4l00XrDzkRhE9fwLK7DNw", "types" : [ "route" ] }, { "address_components" : [ { "long_name" : "Bhabat", "short_name" : "Bhabat", "types" : [ "locality", "political" ] }, { "long_name" : "Sahibzada Ajit Singh Nagar", "short_name" : "SAS Nagar", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Punjab", "short_name" : "PB", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "Bhabat, Punjab, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 30.67249, "lng" : 76.81895999999999 }, "southwest" : { "lat" : 30.64508, "lng" : 76.79106999999999 } }, "location" : { "lat" : 30.6575248, "lng" : 76.8057776 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 30.67249, "lng" : 76.81895999999999 }, "southwest" : { "lat" : 30.64508, "lng" : 76.79106999999999 } } }, "place_id" : "ChIJN3sGJEHrDzkRwGZ1GMXBa2Q", "types" : [ "locality", "political" ] }, { "address_components" : [ { "long_name" : "Chandigarh Airport Area", "short_name" : "Chandigarh Airport Area", "types" : [ "political", "sublocality", "sublocality_level_1" ] }, { "long_name" : "Chandigarh", "short_name" : "Chandigarh", "types" : [ "locality", "political" ] }, { "long_name" : "Chandigarh", "short_name" : "CH", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "Chandigarh Airport Area, Chandigarh, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 30.696639, "lng" : 76.81389089999999 }, "southwest" : { "lat" : 30.6568821, "lng" : 76.76542999999999 } }, "location" : { "lat" : 30.6783321, "lng" : 76.7884713 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 30.696639, "lng" : 76.81389089999999 }, "southwest" : { "lat" : 30.6568821, "lng" : 76.76542999999999 } } }, "place_id" : "ChIJcb4-lILsDzkRJIQJTpsMm8w", "types" : [ "political", "sublocality", "sublocality_level_1" ] }, { "address_components" : [ { "long_name" : "140604", "short_name" : "140604", "types" : [ "postal_code" ] }, { "long_name" : "Punjab", "short_name" : "PB", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "Punjab 140604, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 30.6698436, "lng" : 76.8210886 }, "southwest" : { "lat" : 30.6552941, "lng" : 76.80184109999999 } }, "location" : { "lat" : 30.6625018, "lng" : 76.8129878 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 30.6698436, "lng" : 76.8210886 }, "southwest" : { "lat" : 30.6552941, "lng" : 76.80184109999999 } } }, "place_id" : "ChIJpzrfc1DrDzkRc_qbC2Hz3tc", "types" : [ "postal_code" ] }, { "address_components" : [ { "long_name" : "Sahibzada Ajit Singh Nagar", "short_name" : "SAS Nagar", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Punjab", "short_name" : "PB", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "Sahibzada Ajit Singh Nagar, Punjab, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 30.9369199, "lng" : 76.9439199 }, "southwest" : { "lat" : 30.35902, "lng" : 76.52444009999999 } }, "location" : { "lat" : 30.6496486, "lng" : 76.7567368 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 30.9369199, "lng" : 76.9439199 }, "southwest" : { "lat" : 30.35902, "lng" : 76.52444009999999 } } }, "place_id" : "ChIJOyhuuFPlDzkRzrRj0bvdZPw", "types" : [ "administrative_area_level_2", "political" ] }, { "address_components" : [ { "long_name" : "Punjab", "short_name" : "PB", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "Punjab, India", "geometry" : { "bounds" : { "northeast" : { "lat" : 32.4994008, "lng" : 76.92175809999999 }, "southwest" : { "lat" : 29.537147, "lng" : 73.88057999999999 } }, "location" : { "lat" : 31.1471305, "lng" : 75.34121789999999 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 32.4994008, "lng" : 76.92175809999999 }, "southwest" : { "lat" : 29.537147, "lng" : 73.88057999999999 } } }, "place_id" : "ChIJVXOeVqpkGTkRYYijAzEmvY8", "types" : [ "administrative_area_level_1", "political" ] }, { "address_components" : [ { "long_name" : "India", "short_name" : "IN", "types" : [ "country", "political" ] } ], "formatted_address" : "India", "geometry" : { "bounds" : { "northeast" : { "lat" : 35.5087008, "lng" : 97.39535869999999 }, "southwest" : { "lat" : 6.4626999, "lng" : 68.1097 } }, "location" : { "lat" : 20.593684, "lng" : 78.96288 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 35.5087008, "lng" : 97.39498069999999 }, "southwest" : { "lat" : 6.7535159, "lng" : 68.16288519999999 } } }, "place_id" : "ChIJkbeSa_BfYzARphNChaFPjNc", "types" : [ "country", "political" ] } ], "status" : "OK" }
答案 0 :(得分:3)
这是一种可能性:
library(rjson)
json_data <- fromJSON(file = json_file)
formatted_add <- lapply(json_data$results, function(x) x$formatted_add)
lat <- lapply(json_data$results, function(x) x$geometry$location$lat)
lng <- lapply(json_data$results, function(x) x$geometry$location$lng)
data <- cbind(formatted_add, lat, lng)
我希望这是你需要的。
答案 1 :(得分:1)
好的,澄清之后,你拥有的是每一行data.frame的JSON字符串
要重新创建数据,我将使用您提供的单个JSON字符串(行),并将其放入data.frame的两行
因此,要访问数据,您需要单独解析data.frame的每一行
但是,在您的问题中,您要求“{strong>第一次出现 formatted_address
位置”。
在您提供的数据行中,有七个不同的位置,您可以通过place_id
值的数量来查看,每formatted_address
只有一个place_id
。
所以要求第一次出现没有意义,因为只有一个。
library(jsonlite)
js <- '{
"results": [{
"address_components": [{
"long_name": "Unnamed Road",
"short_name": "Unnamed Road",
"types": ["route"]
}, {
.... <i've omitted the rest of the text> ...
},
"place_id": "ChIJkbeSa_BfYzARphNChaFPjNc",
"types": ["country", "political"]
}],
"status": "OK"
}'
json_data_df <- data.frame(json_data = c(js, js))
## if parsing a row individually you would do
# json_result <- fromJSON(as.character(json_data_df[1, "json_data"]))
## as you're parsing each row of the data.frame, you can use whatever looping
## method you like
## you can get all the data out of the JSON and create a list obect of everything
lst <- lapply(1:nrow(json_data_df), function(x){
fromJSON(as.character(json_data_df[x, 'json_data']))
})
## or you can subset it within the loop to just get the bits you want
lst <- lapply(1:nrow(json_data_df), function(x){
js <- fromJSON(as.character(json_data_df[x, 'json_data']))
data.frame(
place_id = js$results$place_id,
formatted_address = js$results$formatted_address,
lat = js$results$geometry$location$lat,
lng = js$results$geometry$location$lng
)
})
lst
# [[1]]
# place_id formatted_address lat lng
# 1 ChIJYWQws23rDzkRsqz31TNCwXg Unnamed Road, Punjab 160003, India 30.65761 76.79439
# 2 ChIJN3sGJEHrDzkRwGZ1GMXBa2Q Bhabat, Punjab, India 30.65752 76.80578
# 3 ChIJcb4-lILsDzkRJIQJTpsMm8w Chandigarh Airport Area, Chandigarh, India 30.67833 76.78847
# 4 ChIJf560w6fsDzkRXLKn0s52kHM 160004, India 30.65827 76.78559
# 5 ChIJOyhuuFPlDzkRzrRj0bvdZPw Sahibzada Ajit Singh Nagar, Punjab, India 30.64965 76.75674
# 6 ChIJVXOeVqpkGTkRYYijAzEmvY8 Punjab, India 31.14713 75.34122
# 7 ChIJkbeSa_BfYzARphNChaFPjNc India 20.59368 78.96288
#
# [[2]]
# place_id formatted_address lat lng
# 1 ChIJYWQws23rDzkRsqz31TNCwXg Unnamed Road, Punjab 160003, India 30.65761 76.79439
# 2 ChIJN3sGJEHrDzkRwGZ1GMXBa2Q Bhabat, Punjab, India 30.65752 76.80578
# 3 ChIJcb4-lILsDzkRJIQJTpsMm8w Chandigarh Airport Area, Chandigarh, India 30.67833 76.78847
# 4 ChIJf560w6fsDzkRXLKn0s52kHM 160004, India 30.65827 76.78559
# 5 ChIJOyhuuFPlDzkRzrRj0bvdZPw Sahibzada Ajit Singh Nagar, Punjab, India 30.64965 76.75674
# 6 ChIJVXOeVqpkGTkRYYijAzEmvY8 Punjab, India 31.14713 75.34122
# 7 ChIJkbeSa_BfYzARphNChaFPjNc India 20.59368 78.96288
根据注释 - 只访问每个JSON对象的第一个条目,您可以只对lapply
## or you can subset it within the loop to just get the bits you want
lst <- lapply(1:nrow(json_data_df), function(x){
js <- fromJSON(as.character(json_data_df[x, 'json_data']))
data.frame(
place_id = js$results$place_id[1],
formatted_address = js$results$formatted_address[1],
lat = js$results$geometry$location$lat[1],
lng = js$results$geometry$location$lng[1]
)
})
lst
# [[1]]
# place_id formatted_address lat lng
# 1 ChIJYWQws23rDzkRsqz31TNCwXg Unnamed Road, Punjab 160003, India 30.65761 76.79439
# [[2]]
# place_id formatted_address lat lng
# 1 ChIJYWQws23rDzkRsqz31TNCwXg Unnamed Road, Punjab 160003, India 30.65761 76.79439