JSON
JSON(JavaScript Object Notation)
JSONについて
BSON (Binary JSON) について
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と違い