JSON

JSON(JavaScript Object Notation)

JSONについて

www.json.org

BSON (Binary JSON) について

http://bsonspec.org/

JSONの型 null、bool、数字、文字列、配列、オブジェクト

BSONの型 JSONの型、日付、32ビット数字、64ビット数字など

JSON = "{ [ : ," + "name-value"

サンプル

var band = {

"name":"The Bands",

"members":[

{

"name":"Smith",

"role":"drums"

},

{

"name":"John",

"role":"lead,guitar"

}

],

"year":"2012"

}

var John = band.members[1].name;

★JsonPath

http://goessner.net/articles/JsonPath/

pythonの場合

pip install jsonpath-rw

Java

1.org.json

import org.json.JSONException;

import org.json.JSONObject;

public class Test {

public static void main(String[] args) throws JSONException {

String json = "{\"name\":\"Andy\"}";

JSONObject jsonObj = new JSONObject(json);

String name = jsonObj.getString("name");

jsonObj.put("initial", "start");

String[] arr = { "a", "b", "c" };

jsonObj.put("info", arr);

Map<String, String> map = new HashMap<String, String>();

map.put("one", "1m");

map.put("two", "2m");

jsonObj.put("kv", map);

System.out.println(jsonObj);

}

}

2.Json-lib

以下のjarファイルが必要

commons-lang

commons-beanutils

commons-collections

commons-logging

ezmorph

import net.sf.json.JSONObject;

public class Test {

public static void main(String[] args) {

String json = "{\"name\":\"Andy\"}";

JSONObject jsonObj = JSONObject.fromObject(json);

String name = jsonObj.getString("name");

//org.jsonと同じ

}

}

3.JSONIC

http://sourceforge.jp/projects/jsonic/releases/

net.arnx.jsonic.JSON

エンコード

static String encode(Object source)

static void encode(Object source, OutputStream out)

Hoge hoge = new Hoge();

hoge.id = 2;

hoge.setName("Andy");

String text = JSON.encode(hoge); // {"id":2,"name":"Andy"}

変換対象:publicなgetterメソッド、publicフィールドの優先順

staticメソッド・フィールド、transientフィールドが対象外

デコード

static Object decode(String source)

static <T> T decode(String source, Class<? Extends T> cls)

static Object decode(String source, Type type)

static Object decode(InputStream in)

static <T> T decode(InputStream in, Class<? Extends T> cls)

static Object decode(InputStream in, Type type)

static Object decode(Reader reader)

static <T> T decode(Reader reader, Class<? Extends T> cls)

static Object decode(Reader reader, Type type)

String text = "{'id':2,'name':'Andy'}";

Hoge hoge = JSON.decode(text, Hoge.class);

String text = "['aaa','bbb','ccc']";

List<String> list = (List<String>)JSON.decode(text);

String text = "{'1':'aaa','2':'bbb'}";

Map<String, String> map = (Map<String, String>)JSON.decode(text);

4.JSON Processing in Java EE7

Object Model API: Similar to DOM API of XML processing

javax.json

JsonWriter

JsonReader

Streaming API: Similar to SAX API of XML processing

javax.json.stream

JsonParser

JsonGenerator

JavaScript

1.var json = eval('(' + str + ')'); 古い

2.var json = (new Function("return " + str))(); 変

3.var json = JSON.parse(str); JSON文字列 ⇒ JavaScriptオブジェクト

var str = JSON.stringify(obj); JavaScriptオブジェクト ⇒ JSON文字列

・古いブラウザでJSONオブジェクトがない

・JSONルールを守る

var str = '{name:"Jack"}'; NG

var str = '{"name":"Jack"}'; OK

var obj = {};

obj.name = "Jack";

obj.age = 30;

var str = JSON.stringify(obj); // '{"name":"Jack","age":30}'

ちなみに、jQueryの場合

var obj = jQuery.parseJSON('{"name":"Jack"}');

PHP

$a = array("name"=>"Andy", "age"=>20, "birth"=>"2002-01-01");

$json_a = json_encode($a);

$json_aの中身:

string '{"name":"Andy","age":20,"birth":"2002-01-01"}'

$images = array('aaa.png' , 'bbb.png' , 'ccc.png');

$json_b = json_encode($images);

$json_bの中身:

string ["aaa.png","bbb.png","ccc.png"]

$b = json_decode($json_a);

$bの中身:

object(stdClass)

'name' => string 'Andy'

'age' => int 20

'birth' => string '2002-01-01'

$b = json_decode($json_a, true);

$bの中身:

array

'name' => string 'Andy'

'age' => int 20

'birth' => string '2002-01-01'

C#

ターゲット

Person person = new Person

{

Name = "Andy",

Age = 20,

Birthday = Convert.ToDateTime("2010-01-23")

};

1.JavaScriptSerializer System.Web.Extensions参照が必要

※DateTime型はNG

using System.Web.Script.Serialization;

JavaScriptSerializer ser = new JavaScriptSerializer();

string json = ser.Serialize(person);

Console.WriteLine(json);

Person result = ser.Deserialize<Person>(json);

Console.WriteLine(result.Name + result.Age + result.Birthday);

2.DataContractJsonSerializer System.Runtime.Serialization参照が必要

※DateTime型はOK

using System.Runtime.Serialization.Json;

●単数

string json = SerializerUtils.SerializeToString<Person>(person);

Console.WriteLine(json);

Person result = SerializerUtils.DeserializeFromString<Person>(json);

Console.WriteLine(result.Name + result.Age + result.Birthday);

●複数

var list = new List<Person>() { person, person, person };

string json = SerializerUtils.SerializeToString<List<Person>>(list);

Console.WriteLine(json);

List<Person> result

= SerializerUtils.DeserializeFromString<List<Person>>(json);

result.ForEach((item) =>

Console.WriteLine(item.Name + item.Age + item.Birthday));

※SerializerUtilsについてはシリアライズを参照

Python

import json

dic = {'k1':'v1','k2':'v2','k3':'v3'}

str_dic = json.dumps(dic) # {"k3": "v3", ...}

dic2 = json.loads(str_dic)

※文字列に""が必須

with open('json_file','w') as f:

json.dump(dic,f) # dumpsと違い

with open('json_file') as f:

dic2 = json.load(f) # loadと違い