ラベル JSON の投稿を表示しています。 すべての投稿を表示
ラベル JSON の投稿を表示しています。 すべての投稿を表示

2015年6月3日水曜日

Androidでorg.json.JSONObjectを使う際の注意点

Android標準(5.1現在)のorg.json.JSONObjectには、MapとListをputできません。

正確には、入れても想定通りのエンコードができません。(valueにtoStringしたような値が入ります)

MapやListはJSONObjectやJSONArrayへの詰め替えが必要となります。


補足:JSONObjectのput関数には、valueの型にMapおよびListのものがなく、put (String name, Object value)のvalueにはMapおよびListが含まれない。

2014年11月16日日曜日

UbuntuでJSONの整形 (2)

UbuntuでJSONの整形で紹介した方法では、
日本語がユニコードにエスケープされてしまうので回避方法を紹介します。(キーのソートも追加しました)

JsonPrettyPrint.pyを作成
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json

jsonStr = raw_input()
prettyPrint = json.loads(jsonStr)
print json.dumps(prettyPrint, indent=4, ensure_ascii=False, sort_keys=True)

整形する場合は

$ python JsonPrettyPrint.py
{"キー":"値"}

{
    "キー": "値"
}

でできます。

sample : JsonPrettyPrint.py

2014年4月15日火曜日

HiveでJSONを解析(json_tuple)

HiveでJSONを解析する方法の1つjson_tupleの使い方を説明します。

テストデータ

-----------------------------------------------------------------
{
    "key1":"sample1",
    "key2":2,
    "key3":{
        "key4":[
            {
                "key5":"sample5"
            },
            {
                "key5":"sample6"
            }
        ]
    }
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定

テーブル定義

-----------------------------------------------------------------
CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義

get_json_objectでkey5を取得する場合

hive> SELECT get_json_object(json_table.raw_data, '$.key1'), get_json_object(json_table.raw_data, '$.key2') FROM json_table;

sample1 2
test1   22
⇒取得する項目が少なければ良いが、多いとHQLが見難くなる。

json_tupleを使うと

hive> SELECT keys.* FROM json_table AS json LATERAL VIEW json_tuple(json.raw_data, 'key1', 'key2') keys as k1, k2;

sample1 2
test1   22
⇒こっちの方が若干見やすい。。。
※LATERAL VIEWについては、別途説明します。


参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple

HiveでJSONを解析(get_json_object)

HiveでJSONを解析する方法の1つget_json_objectの使い方を説明します。

テストデータ

-----------------------------------------------------------------
{
    "key1":"sample1",
    "key2":2,
    "key3":{
        "key4":[
            {
                "key5":"sample5"
            },
            {
                "key5":"sample6"
            }
        ]
    }
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定

テーブル定義

-----------------------------------------------------------------
CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義

HQL

hive> SELECT get_json_object(json_table.raw_data, '$.key1') FROM json_table;

sample1
test1

hive> SELECT get_json_object(json_table.raw_data, '$.key3.key4[0].key5') FROM json_table;

sample5
test5

参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object

2014年3月21日金曜日

UbuntuでJSONの整形

Ubuntu環境でJSONを整形したい場合は、Pythonを使うと簡単にできます。
※最近の環境ではPythonがプリインストールされている。

$ echo '{"key1":"value","key2":2}' | python -mjson.tool
{
    "key1": "value",
    "key2": 2
}

ファイルを整形する場合は

$ cat json.txt | python -mjson.tool
{
    "key1": "value",
    "key2": 2,
    "key3": [
        3,
        4,
        5
    ],
    "key4": {
        "key5": "test",
        "key6": 6
    }
}

で簡単にできます。

※ファイルに出力する場合は、「> json2.txt」を後につける。

UbuntuでJSONの整形に続く