ホームページ バックエンド開発 C#.Net チュートリアル json ファイルを解析するための C# 実装コード

json ファイルを解析するための C# 実装コード

Jan 18, 2017 am 09:54 AM

C# parsing json

JSON (正式名: JavaScript Object Notation) は軽量のデータ交換形式です。これは、JavaScript 構文標準のサブセットに基づいています。 JSON は完全に言語に依存しないテキスト形式であり、さまざまなネットワーク、プラットフォーム、プログラム間で簡単に転送できます。 JSON の構文は非常にシンプルで、人間にとっては読み書きが簡単で、マシンにとっては解析と生成が簡単です。

JSONとXMLの比較

◆可読性
比較すると、JSONとXMLの可読性は、XMLが補助タグを提供するため、人が読んで理解するのに適しています。
◆ファイルサイズと送信
XMLは便利なタグが利用できるため、JSONに比べてファイルサイズが大きくなります。さらに、JSON は Javascript を起源としているため、当然の主戦場は Javascript とインターネットです。ここでは、JSON には XML では追いつけない利点があります。

JSON 構文

1. JSON 構文は、JavaScript オブジェクト表記構文のサブセットです。

•データは名前と値のペアで構成されます。名前は文字列であり、二重引用符を使用して表現されます。値は次のとおりです: 数値 (整数または浮動小数点)、文字列 (二重引用符内)、配列 (角括弧内)、オブジェクト (中括弧内)、true/false/null。
• カンマで区切られたデータ:
• オブジェクトを保持する中括弧: オブジェクトには、配列を含むさまざまなデータを含めることができます。
• 角括弧は配列を保持します。数値にはオブジェクトを含めることができます。

例:

{
    "employees": [
        {
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
            "firstName": "George",
            "lastName": "Bush"
        }
    ]
}
ログイン後にコピー

2. JSON にエスケープ文字が含まれている場合は、エスケープする必要があります。たとえば、ファイル パスには「」の代わりに「\」を使用する必要があります。例: { "ファイル":"C:\a.txt"}。

.NETはJSONを操作します

メモリに読み込まれるJSONファイルは文字列であり、.NETはJSON文字列を生成して解析することでJSONを操作します。通常、JSON を操作するにはいくつかの方法があります:

1. オリジナルの方法: JSON の構文形式に従い、JSON 文字列を直接操作するコードを記述します。必要がない限り、この道を選択して最初からやり直す人はほとんどいません。

2. 一般的な方法 [★★★★★]:

この方法では、オープンソースのクラス ライブラリ Newtonsoft.Json (ダウンロード アドレス http://json.codeplex.com/) を使用します。ダウンロード後、プロジェクトに追加することで利用可能になります。通常は、JObject、JsonReader、JsonWriter を使用して処理できます。この方法は最も多用途で柔軟性があり、不快な部分がいつでも変更できます。
(1) JsonReader を使用して Json 文字列を読み取る:

string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
    Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value);
}
ログイン後にコピー

(2) JsonWriter を使用して文字列を書き込む:

StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();
writer.WritePropertyName("input");
writer.WriteValue("value");
writer.WritePropertyName("output");
writer.WriteValue("result");
writer.WriteEndObject();
writer.Flush();
string jsonText = sw.GetStringBuilder().ToString();
Console.WriteLine(jsonText);
ログイン後にコピー

(3) JObject を使用して文字列を読み書きする:

JObject jo = JObject.Parse(jsonText);
string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();
ログイン後にコピー

(4) JsonSerializer を使用してオブジェクトを読み書きする(JsonWriter With JsonReader に基づく):

配列型データ

string jsonArrayText1 = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]";
JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
string ja1a = ja[1]["a"].ToString();
//或者
JObject o = (JObject)ja[1];
string oa = o["a"].ToString();
ログイン後にコピー

ネスト形式

string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["beijing"]["zone"].ToString();
string zone_en = jo["beijing"]["zone_en"].ToString();
ログイン後にコピー

カスタムクラス Project

Project p = new Project() { Input = "stone", Output = "gold" };
JsonSerializer serializer = new JsonSerializer();
StringWriter sw = new StringWriter();
serializer.Serialize(new JsonTextWriter(sw), p);
Console.WriteLine(sw.GetStringBuilder().ToString());
StringReader sr = new StringReader(@"{""Input"":""stone"", ""Output"":""gold""}");
Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project));
Console.WriteLine(p1.Input + "=>" + p1.Output);
ログイン後にコピー

上記のコードは、次の Project クラス定義に基づいています:

class Project
{
    public string Input { get; set; }
    public string Output { get; set; }
}
ログイン後にコピー

さらに、上記の JsonTextReader と他のクラスはコンパイルできません。そうであれば、それは私たちが変更したクラスであることを意味し、独自の関連クラスに置き換えるだけで、使用には影響しません。

3. 組み込みメソッド: .NET Framework 3.5/4.0 で提供される System.Web.Script.Serialization 名前空間の JavaScriptSerializer クラスを使用して、オブジェクトをシリアル化および逆シリアル化します。これは非常に簡単です。

Project p = new Project() { Input = "stone", Output = "gold" };
 JavaScriptSerializer serializer = new JavaScriptSerializer();
 var json = serializer.Serialize(p);
 Console.WriteLine(json);
 var p1 = serializer.Deserialize<Project>(json);
 Console.WriteLine(p1.Input + "=>" + p1.Output);
 Console.WriteLine(ReferenceEquals(p,p1));
ログイン後にコピー

注: VS2010 を使用している場合、現在のプロジェクトのターゲット フレームワークを .Net Framework 4 に変更する必要があり、クライアント プロファイルは使用できません。もちろん、この System.Web.Extensions.dll は主に Web で使用されます。これを Console プロジェクトで直接使用するのはリソースの無駄のように思えます。

また、最後の文からもわかるように、シリアライズとデシリアライズはディープコピーの代表的な実装方法です。

4. コントラクト方法: System.Runtime.Serialization.dll によって提供される DataContractJsonSerializer または JsonReaderWriterFactory を使用します。

Project p = new Project() { Input = "stone", Output = "gold" };
DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType());
string jsonText;
using (MemoryStream stream = new MemoryStream())
{
    serializer.WriteObject(stream, p);
    jsonText = Encoding.UTF8.GetString(stream.ToArray());
    Console.WriteLine(jsonText);
}
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText)))
{
    DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Project));
    Project p1 = (Project)serializer1.ReadObject(ms);
    Console.WriteLine(p1.Input + "=>" + p1.Output);
}
ログイン後にコピー

ここで、Project クラスとメンバーは関連する属性を追加する必要があることに注意してください:

[DataContract]
class Project
{
    [DataMember]
    public string Input { get; set; }
    [DataMember]
    public string Output { get; set; }
}
ログイン後にコピー

C# 解析 json ファイルの実装コードに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語で特殊文字を処理する方法 C言語で特殊文字を処理する方法 Apr 03, 2025 pm 03:18 PM

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

C文字列におけるcharの役割は何ですか C文字列におけるcharの役割は何ですか Apr 03, 2025 pm 03:15 PM

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語でさまざまなシンボルを使用する方法 C言語でさまざまなシンボルを使用する方法 Apr 03, 2025 pm 04:48 PM

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語でCharを変換する方法 C言語でCharを変換する方法 Apr 03, 2025 pm 03:21 PM

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

C言語でchar配列の使用方法 C言語でchar配列の使用方法 Apr 03, 2025 pm 03:24 PM

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

See all articles