JSONの詳細な分析

2023-07-30 14:24:36

GPU、CUDA、cuDNNの関係のまとめ Vueの基本概念

目次

  1. JSON を理解する
  2. JSONオブジェクト形式
  3. JSON構文形式
  4. JSON の解析

1. JSON を理解する

はじめに: JSON (JavaScript Object Notation)、つまり JS Object Notation は軽量のデータ交換形式です。

さらなる理解:

  • JSON と JavaScript の関係: この 2 つの関係は、Lei Feng と Lei Feng Tower の関係であり、この 2 つに関係はありません。
  • データ交換形式: クライアントとサーバー間のデータ交換を実現する 当時のデータ交換言語は XML が一般的でしたが、 Douglas crockford は xml の生成と解析が面倒だと感じ、提案しました簡略化された形式 json; (詳細については、「4.JSON 解析」を参照してください)
  • 比較的軽量であるということは、JSON の単純な構文形式と明確な階層構造は XML よりも明らかに読みやすく、データ交換の点では、JSON は XML よりも使用する文字数が少ないため、帯域幅を大幅に節約できます。データの送信によって占有されます。

2. JSONオブジェクト形式

タイトル + コンテンツというさまざまな言語で本 (オブジェクト) を記述してみてください。軽量なJSONの利点がわかります。

  • Java
Public class Test {
	public static void main() {
		Book b = new Book();
		b.setName(“金のりんご”); 
		b.setInfo(“リンゴを育てるのは大変な作業です”);
	}
}
class Book {
	private String name;
	private String info;
	メソッド;
	get/setメソッド...
}
  • JavaScript
	var b = new Object();
	b.name = "金のりんご"; 
	b.info = "リンゴを育てるのは大変な作業です";
  • XML
<book>
	<name>金のりんご>
	<info>リンゴを育てるのは大変な作業です> 
book>
  • JSON
{ 
	"name":"金のりんご",
 	"info":"リンゴを育てるのは大変な作業です" 
}

3. JSON構文形式

  • オブジェクトは中括弧で表され、オブジェクトのプロパティは中括弧内のキーと値のペアで記述されます(中括弧にはキーと値のペアが 1 つずつ含まれていることがわかります)。
  • コロンはキーと値を接続するために使用され、カンマは複数のキーと値のペアを区切るために使用されます。
  • キーと値のペアのキーは引用符で囲む必要があります (通常、Java を解析するとき、キーに引用符が使用されていない場合はエラーが報告されます。JS は正しく解析できます)。
  • キーと値のペアの値には、JS 内の任意のタイプのデータを指定できます。
  • 配列形式: [要素 1, 要素 2...];
  • JSON 形式では、相互に入れ子にすることができます。たとえば、配列 1 はオブジェクト 1 に表示され、オブジェクト 2 は配列 1 に表示されます。

ケース

{
	"name":"果物の種類",
	"info":"果物を育てるのは大変な作業です",
	"fruit":["りんご","バナナ",{
				"name":"スイカ",
				"info":"種なしスイカ"
			}],
	"haha":{
		"name":"大きな長いナイフ",
		"length":"40cm"
	}
}

4. JSON の解析

Java は JSON を使って何をしますか? 前述したように、データ交換を実現するために使用されます。JSON に格納されているデータ型は文字列であり、この文字列はキーと値のペアで構成されていることがわかっています。これは、Java オブジェクトの属性と値の関係に非常によく似ています。データの便利な操作を実現するために、JSON 文字列を対応する Java オブジェクトに変換する方法はないだろうか? それとも Java オブジェクトの情報を JSON 文字列に変換して他の人が見られるようにしたいでしょうか? JSON 解析の概念を以下に紹介します。

  • シリアル化: Java のオブジェクトを JSON 形式の文字列にすばやく変換します。
  • 逆シリアル化: JSON 形式の文字列を Java オブジェクトに変換します。

Java 公式には、JSON 解析に対応する API は提供されていません。この記事では、最も一般的に使用される 2 つの JSON 解析メソッド (Google の Gson と Ali の FastJson ) を説明します。 、まず対応する jar パッケージを取得する必要があります。

Gson 解析

  • オブジェクトを JSON 文字列に変換する手順は次のとおりです。
  1. jarパッケージの導入
  2. JSON 文字列を変換する必要がある場所に次のコードを記述するだけです。 String json = new Gson().toJSON(object to be Converter);

ケース

	Book b = new Book("金のりんご","リンゴを育てる悲しい過程を語る",20,100);	
	String json = new Gson().toJson(b);
	System.out.println(json);

出力結果

{"name":"金のりんご","info":"リンゴを育てる悲しい過程を語る","prize":20,"page":100}
  • JSON 文字列をオブジェクトに変換する手順:

1. jar パッケージを導入します。
2. Java オブジェクトを変換する必要がある場所に次のコードを記述します。 type object = new Gson().fromJson(JSON string, object type.class);

ケース1

	String json1 = "{\"name\":\"金のりんご\",\"info\":\"リンゴを育てる悲しい過程を語る\",\"prize\":10,\"page\":100}";
	Book b1 = new Gson().fromJson(json,Book.class);
	System.out.println(b1.getPrize());

出力結果

	10

ケース2

注: 文字列の最外層には中括弧「{}」があり、英語の引用符の前にエスケープ文字 \ があります。

	//		文字列情報がオブジェクト情報と一致しない場合、hahmap 型もキーと値のペアとして格納されるため、文字列は hashmap オブジェクトに転送されます。
	String json2 = "{\"name\":\"金のりんご\",\"info\":\"リンゴを育てる悲しい過程を語る\",\"prize\":20,\"page\":100,\"content\":[\"正午の鍬掘りの日\",\"滴る汗\",\"はははははははは\"]}";
	HashMap map = new Gson().fromJson(json2,HashMap.class);
	System.out.println(map.get("content"));
	//		ここで説明しますと、文字列に配列が含まれている場合、HashMap に変換した後、その配列は List として保存されます (実際に試してみてください)
	ArrayList list = (ArrayList) map.get("content");
	System.out.println(list.get(0));

出力結果

	[正午の鍬掘りの日,滴る汗,はははははははは]
	正午の鍬掘りの日

FastJson 解析

  • オブジェクトを JSON 文字列に変換する手順は次のとおりです。
  1. jarパッケージの導入
  2. JSON 文字列を変換する必要がある場所に次のコードを記述するだけです。

ケース

	Book b = new Book("金のりんご","リンゴを育てる悲しい過程を語る",20,100);
	String fastJson = JSON.toJSONString(b);
	System.out.println(fastJson);

出力結果

{"info":"リンゴを育てる悲しい過程を語る","name":"金のりんご","page":100,"prize":20}
  • JSON 文字列をオブジェクトに変換する手順:
  1. jarパッケージの導入
  2. Java オブジェクトを変換する必要がある位置に、次のコードを記述します: type object name=JSON.parseObject(JSON string, type.class); または List<type> list=JSON.parseArray(JSON string 、.class) と入力します。

ケース1

	Book b1 = JSON.parseObject("{\"name\":\"金のりんご\",\"info\":\"リンゴを育てる悲しい過程を語る\",\"prize\":20,\"page\":100}",Book.class);
	System.out.println(b1);

演算結果

	Book{name='金のりんご', info='リンゴを育てる悲しい過程を語る', prize=20, page=100}

ケース 2: 配列を list コレクションに変換する

	List<String> list = JSON.parseArray("[\"正午の鍬掘りの日\",\"滴る汗\",\"はははははははは\"]",String.class);
	System.out.println(list.get(1));

演算結果

	滴る汗

ケース 3: 少し複雑な JSON ケースの解析

{
	"name":"果物の種類",
	"info":"果物を育てるのは大変な作業です",
	"fruit":["りんご","バナナ",{
				"name":"スイカ",
				"info":"種なしスイカ"
			}],
	"haha":{
		"name":"大きな長いナイフ",
		"length":"40cm"
	}
}

コード

	String json = "[{
						"name":"果物の種類",
						"info":"果物を育てるのは大変な作業です",
						"fruit":["りんご","バナナ",{
										"name":"スイカ",
										"info":"種なしスイカ"
								}],
						"haha":{
						"name":"大きな長いナイフ",
						"length":"40cm"
						}
					}]";
	//1.	最外層は配列形式であり、配列には要素が 1 つだけ含まれます。
	List<Map> list = JSON.parseArray(json,Map.class);
    Map map = list.get(0);
    String info = (String) map.get("info");
    System.out.println(info);   //果物を育てるのは大変な作業です
    //2.	キー fruit に対応する値の型は配列です。 toJSONString() メソッドを使用して配列を文字列形式に変換し、解析します。
    String fruit = JSON.toJSONString(map.get("fruit"));
    List<String> list1 = JSON.parseArray(fruit,String.class);
    System.out.println(list1.get(0));   //りんご
    //      オブジェクトへの文字列
    Map map1 = JSON.parseObject(list1.get(2),Map.class);
    System.out.println(map1.get("info"));   //種なしスイカ

実行結果の

概要

  • JSON 分析は、シリアル化と逆シリアル化の 2 つの状況にすぎません。シリアル化はより単純で、逆シリアル化ではオブジェクトの型に注意が払われます。
  • ここで、最も外側の層は文字列に「[]」を追加します。最初のテストは配列です。
  • toJSONString() メソッドは、配列から文字列への変換を実現します。
  • より深く理解するには、コードを手で入力することをお勧めします。