エスケープされたJSONを含む文字列を有効なJSONに安全に変換するにはどうすればいいですか? 質問する

エスケープされたJSONを含む文字列を有効なJSONに安全に変換するにはどうすればいいですか? 質問する

次のように JSON 応答を返すサードパーティ API と通信しています。

"{\"SomeResponse\":{\"FIrstAttribute\":8,\"SecondAttribute\":\"On\",\"ThirdAttribute\":{\"Id\":2,\"FirstName\":\"Okkie\",\"Name\":\"Bokkie\",\"Street\":\"\",\"StreetNumber\":null,\"PostCode\":\"\",\"City\":\"\",\"Country\":\"}}}"

これは一種の JSON ですが、文字列です。最初と最後の二重引用符、そしてもちろんすべてのエスケープ スラッシュに注意してください。

現在、私はこれを文字列で解決しています。バックスラッシュと最初と最後の引用符を置き換えます。その後、解析できるようになります。

mystring.Replace("\\", "");

しかし、属性の 1 つに実際に値としてバックスラッシュが含まれている場合はどうなるでしょうか? たとえば、次のようになります。

\"SecondAttribute\":\"My Super Back Slash: \\ . That was it.\"

その場合、値に含まれているはずのバックスラッシュを誤って削除してしまいます。

この JSON 文字列を適切に解析する方法について良いアイデアを持っている人はいますか?

ベストアンサー1

これは基本的にJSONでエンコードされていますとしてJSON 文字列 - コメントに従って、文字列の末尾をわずかに修正した後。Json.NET でこれを処理するのはそれほど難しくなく、JToken.Parseまず を使って効果的にエスケープ解除し、次に結果を解析します。

using System;
using System.IO;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main(string[] args)
    {
        string text = File.ReadAllText("test.json");
        JToken token = JToken.Parse(text);
        JObject json = JObject.Parse((string) token);
        Console.WriteLine(json);
    }
}

出力:

{
  "SomeResponse": {
    "FIrstAttribute": 8,
    "SecondAttribute": "On",
    "ThirdAttribute": {
      "Id": 2,
      "FirstName": "Okkie",
      "Name": "Bokkie",
      "Street": "",
      "StreetNumber": null,
      "PostCode": "",
      "City": "",
      "Country": ""
    }
  }
}

バックスラッシュを含むデータであっても、バックスラッシュが再度エンコードされることが予想されるため、問題ないはずですが、念のため再確認しておく価値はあります。

おすすめ記事