C#「JSON」形式のデータの解析とネットワークの実用的なケースの開始

実際の戦闘:
画像の説明を追加してください

序文:

JSON形式でのデータの解析は、クローラーにとって非常に重要です。Webページのほとんどのインターフェイスは、基本的にこの形式を返します。データのごく一部のみが必要な場合は、文字列セグメンテーションを使用できますが、通常、クロールコンテンツは小さくありません。 。パート...常に文字列セグメンテーションを使用する場合、それは非常に時間とメモリを消費します

JSON形式とは何ですか?
それがどのように見えるか見てみましょう

これはオブジェクト形式のデータです

{
    
    
	"name": "生产队的驴",
	"age": "17",
	"state": "在线",
	"id": "dpc5201314",
	"phone": "18888888888",	
}

これは単純なJSON形式のデータですが、もちろん、クローラーの一般的なデータはそれほど多くありません...

JSONは2つの形式に分けられます。1つはオブジェクト(オブジェクト)、もう1つは配列(配列)です。異なる形式を解析する方法は異なりますが、類似しています。

識別形式:
識別形式は非常に単純
です。これは、彼の前の記号{}がオブジェクトであり、[]が配列であることを確認するためです。

オブジェクト形式:
画像の説明を追加してください
配列形式:

{
    
    
    "employees": [
        {
    
    
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
    
    
            "firstName": "George",
            "lastName": "Bush"
        },
        {
    
    
            "firstName": "Thomas",
            "lastName": "Carter"
        }
    ]
}

{これはオブジェクトです}
[これは配列です]

配列には添え字でアクセスできます

JSON構造:
画像の説明を追加してください
数値構造であることがわかります。
その中の要素ノードにアクセスするには、最初にルート(employees)を削除してから、リーフ(firstName)を取得する必要があります。
前述のように、配列は下付き文字による対応するコンテンツ


C#解析
では、彼の形式を簡単に紹介し、C#を使用して解析します。Newtonsoft.Jsonクラスライブラリ
を使用してインストールする必要があります。
画像の説明を追加してください
画像の説明を追加してください

名前空間:

Newtonsoft.Json.Linqを使用します。

名前空間をインポートすることを忘れないでください

オブジェクトと配列には異なる機能があります。
オブジェクト:JObject
配列:JArray

JS並べ替えツール:
通常のクローラーによって返されるデータは非常に乱雑であるため、JSツールを使用して並べ替える必要があります
画像の説明を追加してください

並べ替えると一目でわかります

画像の説明を追加してください
オンラインJS解析ツール


オブジェクトの解析:
最初にJSONデータが必要です。これは、デモでローカルから直接インポートするのに便利です...もちろん、通常のクローラーはサーバーから取得されます...デモのためだけです

  StreamReader read = new StreamReader(@"C:\Users\Acer\Desktop\1.txt", Encoding.UTF8);
  //读取文本
string str =read.ReadToEnd();

テキストコンテンツ
画像の説明を追加してください
{}は、オブジェクトの関数を使用して解析されたオブジェクトです。

JObject arr = JObject.Parse(str);
 Console.WriteLine("名字:"+arr["name"]);
  Console.WriteLine("年龄:" + arr["age"]);
  Console.WriteLine("状态:" + arr["state"]);
 Console.WriteLine("账号:" + arr["id"]);
 Console.WriteLine("手机号:" + arr["phone"]);

オブジェクトごとにノードarr["age"]を取得します

それは実際の戦闘ではないので...それは難しくありません

配列分析:
画像の説明を追加してください
これは実際には配列を含むオブジェクトであるため、キャストする必要があります

JSONを読む:

   StreamReader read = new StreamReader(@"C:\Users\Acer\Desktop\2.txt", Encoding.UTF8);    
        string str =read.ReadToEnd();

強制変換形式:

JObject j = JObject.Parse(str);
JArray r = (JArray)j["employees"];
//强制转成数组 因为要获取employees

変換が成功したら、添え字を使用して、データを
ここに画像の説明を挿入
表示するために必要なデータを取得できます。

 Console.WriteLine(r[1]["firstName"]);

最初の[]は添え字で、2番目は取得するノードです。
画像の説明を追加してください
すべてのデータを表示する必要がある場合は、ループを使用して添え字にアクセスして取得できます。

 for (int i = 0; i < r.Count; i++)
            {
    
    
                Console.WriteLine(r[i]["firstName"]);
            }

画像の説明を追加してください

同じことが他のノードにも当てはまります

for (int i = 0; i < r.Count; i++)
            {
    
    
                Console.WriteLine(r[i]["firstName"]);
                Console.WriteLine(r[i]["lastName"]+"\n");
                
            }

画像の説明を追加してください


そんなに言って、実際の戦闘に直接参加しました...

コメント領域:
画像の説明を追加してください
JSONはネストできるため、データが乱雑すぎて
オンラインJS解析ツール
画像の説明を追加してください
を整理できません。ノードにアクセスするたびに、最初に前のノードを取得する必要があります。
画像の説明を追加してください
すべてのデータにはデータ(ツリールート)が含まれ、内部にネストされています。ルートコメントが彼のコメントデータであるvisionCommentListとrootCommentsを使用して、彼は配列です

authorName:ユーザー名
コンテンツ:コメントコンテンツ
headurl:ユーザーアバター

これは、オブジェクトの方法で最初に彼を取得するオブジェクトです

 JObject j = JObject.Parse(str);

ネストされたノードを取得します。

string js = j["data"]["visionCommentList"]["rootComments"].ToString();
  JArray r = JArray.Parse(js);
  //剩下的就是 数组 然后使用数组的方式解析

コメントを表示するために添え字をループする

 for (int i = 0; i < r.Count; i++)
            {
    
    
 Console.WriteLine("\n"+r[i]["authorName"]+": "+r[i]["content"]);
            }

画像の説明を追加してください

要約:
難しいことではないようです。実際にクローラーを実行するときに渡すインターフェイスとパラメーターを見つけるのは難しいです...

純粋なハンドプレイ、親指を立ててください〜

おすすめ

転載: blog.csdn.net/dpc5201314/article/details/123025190