2017-06-12 3 views
1

Es gibt einen langen string Wert, der eine json Liste enthält:Wie extrahiere ich Inhalte aus einer JSON-Liste?

{"name":"jack","age":"38","city":"JP"},{"name":"lee","age":"42","city":"tjs"},{"name":"smith","age":"46","city":"kh"} 

Ziel ist es Informationen von name zu extrahieren, so dass das Ergebnis davon ist, 'jack,lee,smith'.

Ich versuchte get_json_object, aber es gibt null zurück; Ich versuchte auch get_json_object mit split aber immer noch nicht funktioniert ...

Gibt es eine geeignete Funktion in Hive, die diese Forderung umsetzen kann?

Antwort

1
with t as (select '{"name":"jack","age":"38","city":"JP"},{"name":"lee","age":"42","city":"tjs"},{"name":"smith","age":"46","city":"kh"}' as myjson) 
select get_json_object(concat('{"x":[',myjson,']}'),'$.x.name[*]') as names 
from t 

+------------------------+ 
|   names   | 
+------------------------+ 
| ["jack","lee","smith"] | 
+------------------------+ 

with t as (select '{"name":"jack","age":"38","city":"JP"},{"name":"lee","age":"42","city":"tjs"},{"name":"smith","age":"46","city":"kh"}' as myjson) 
select translate(get_json_object(concat('{"x":[',myjson,']}'),'$.x.name[*]'),'[]"','') as names 
from t 

+----------------+ 
|  names  | 
+----------------+ 
| jack,lee,smith | 
+----------------+ 
+0

Wenn umschreibt es 'select get_json_object (concat ('{ "x": [', myjson, ']}') , '$. x [*]. name') 'dann funktioniert es .. Danke für deine Antwort. – superz

+0

Gern geschehen. Ps.s. Dies ist ein getesteter Code und es scheint, dass beide Varianten funktionieren ('$ .x.name [*] '' und '' $ .x [*]. Name'') –

Verwandte Themen