【解決方法】C#でネストされたJSONから特定のフィールド値を取得するには?


やあ

「WayBill」の特定の値を抽出するのに問題があります
「無効なキー値を持つ JArray 値にアクセスしました: “WayBill”.Int32 配列インデックスが必要です」というエラーが表示されました。

Plsは私にアドバイスします

ありがとうございました

私が試したこと:

JavaScript
Json is 
{
	"Status": true,
	"Message": "Shipment Creation Successful",
	"ResponseData": [{
		"PickupBranchCode": "DKPG",
		"DeliveryRouteCode": "HAKHG2M3",
		"WayBill": ["ZND167281208805"],
		"DeliveryHubCode": "HAKH",
		"DeliveryBranchCode": "HAKH",
		"PickupRouteCode": "DUSJW2WE",
		"PickupHubCode": "HSHM"
	}],
	"Reason": null
}

        Dim json = Me.txtJson.Text
        Dim obj As Object = JsonConvert.DeserializeObject(json)
Me.txtResult.Text = obj("ResponseData")("WayBill").ToString

解決策 1

のみを取り除きたい場合は、 WayBill 数字、次に使用できます: SelectToken を使用した JSON のクエリ – NewtownSoft[^]

C#
using Newtonsoft.Json.Linq;

string rawJson = 
    $$""" 
      {
      	"Status": true,
      	"Message": "Shipment Creation Successful",
      	"ResponseData": [{
      		"PickupBranchCode": "DKPG",
      		"DeliveryRouteCode": "HAKHG2M3",
      		"WayBill": ["ZND167281208805"],
      		"DeliveryHubCode": "HAKH",
      		"DeliveryBranchCode": "HAKH",
      		"PickupRouteCode": "DUSJW2WE",
      		"PickupHubCode": "HSHM"
      	}],
      	"Reason": null
      }
      """;

JObject jObj = JObject.Parse(rawJson);

IEnumerable<string> billNumbers = jObj
    .SelectToken("$.ResponseData[0]['WayBill']")
    .Values<string>();

string wayBillNumber = string.Join(", ", billNumbers);

Console.WriteLine($"WaBill #: {wayBillNumber}");

しかし、Json 全体を逆シリアル化したい場合は、次の記事をご覧ください。 C# と VB で Newtonsoft.Json を操作する[^]

コメント

タイトルとURLをコピーしました