29

JSON データを扱うのは初めてです。

Web サービスからデータを読み取っています。返されるクエリ データは次のとおりです。

[["B02001_001E","NAME","state"],
 ["4712651","Alabama","01"],
 ["691189","Alaska","02"],
 ["6246816","Arizona","04"],
 ["18511620","Florida","12"],
 ["9468815","Georgia","13"],
 ["1333591","Hawaii","15"],
 ["1526797","Idaho","16"],
 ["3762322","Puerto Rico","72"]]

最初にオブジェクトがどのようなものかを定義しなくてもベース オブジェクトが生成されるように、このデータを逆シリアル化する方法はありますか? 上記の例では、オブジェクトは最初の行で定義されています。

           ["B02001_001E","NAME","state"],

一般に、Web サービスは、最初の行が列名を提供し、後続の行がデータ値を提供する 2 次元の JSON 配列としてフォーマットされたクエリ データを返します。

4

4 に答える 4

46

これは非常に簡単にデシリアライズできます。C# でのデータの構造は、そのままList<string[]>実行できます。

  List<string[]> data = JsonConvert.DeserializeObject<List<string[]>>(jsonString);

上記のコードは、json.NET を使用していることを前提としています。

編集: json は技術的には文字列配列の配列であることに注意してください。List<string[]>より直感的であるため、私は自分の宣言に使用することを好みます。json.NET で問題が発生することはありません。文字列配列の配列にしたい場合は、型を (私が思うに) に変更する必要string[][]があります。私はよく知らないので、ここでそれを扱うのは面倒です。

于 2013-08-14T21:17:12.507 に答える
35

.Net 4.5 を使用する場合は、標準の .Net json シリアライザーも使用できます。

using System.Runtime.Serialization.Json;
...    
Stream jsonSource = ...; // serializer will read data stream
var s = new DataContractJsonSerializer(typeof(string[][]));
var j = (string[][])s.ReadObject(jsonSource);

.Net 4.5 以前では、JavaScriptSerializer クラスを使用できます。

using System.Web.Script.Serialization;
...
JavaScriptSerializer serializer = new JavaScriptSerializer();
string[][] list = serializer.Deserialize<string[][]>(json);
于 2013-08-14T21:41:15.977 に答える
0

ステップ 1: json.org に移動して、この Web サービスの呼び出しに使用しているテクノロジの JSON ライブラリを見つけます。そのライブラリをダウンロードしてリンクします。

ステップ 2: Java を使用しているとしましょう。JSONArray を次のように使用します。

JSONArray myArray=new JSONArray(queryResponse);
for (int i=0;i<myArray.length;i++){
    JSONArray myInteriorArray=myArray.getJSONArray(i);
    if (i==0) {
        //this is the first one and is special because it holds the name of the query.
    }else{
        //do your stuff
        String stateCode=myInteriorArray.getString(0);
        String stateName=myInteriorArray.getString(1);
    }
}
于 2013-08-14T21:24:59.647 に答える