2

WCF サービスから返される string[] 配列を表す長い JSON 文字列があります。配列要素は単なる文字列であり、オブジェクトではありません。これは戻りデータの例です

    ["1|ArrayElement1","2|ArrayElement2","3|ArrayElement3"..."n|ArrayElementn"]

文字列にインデックスが含まれていてもかまいませんが、文字列を解析して Android の ArrayList に変換し、ListView に適合させる必要があります。

これらは技術的には JSONObjects ではないため、それらを反復処理して各配列要素から文字列を抽出するにはどうすればよいでしょうか?

4

4 に答える 4

8

これは文字列の有効な JSON 配列です。通常は次のように解析できます。

JSONArray jsonStrings = json.getJSONArray("items");
String strings[] = new String[jsonStrings.length()];
for(int i=0;i<strings.length;i++) {
strings[i] = jsonStrings.getString(i);
}
于 2012-04-13T20:37:51.527 に答える
0

明確にするために、私が理解しているように、配列インデックスとパイプ文字で始まる有効な JSON の文字列である文字列の JSON 配列を受け取っていますか?

まず、この忌まわしきものの作成者に連絡して、基準に違反していることについて講義することをお勧めします。彼らが言うことを聞かない場合は、上司に相談してください。この種のことは私の意見では受け入れられず、停止する必要があります。

第二に、次のようなことをお勧めします。

string[] element_strings = JSON.deserialize(WCF_string_result);
object[] elements = new object[element_strings.length];
for(int x = 0; x < elements.length; x++)
{
    int pipeIndex = element_strings.indexOf("|");
    elements[x] = JSON.deserialize(element_strings[x].substr(pipeIndex + 1));
}

もちろん、これは、JSON オブジェクトの文字列を逆シリアル化する何らかの方法があることを前提としています。そうでない場合は、Android で利用可能な組み込みのライブラリを使用することをお勧めします。

http://developer.android.com/reference/org/json/package-summary.html

于 2012-04-13T20:49:18.230 に答える
0

たぶん、この投稿があなたを助けることができます:

Android/Java での JSON 配列の反復

  HashMap<String, String> applicationSettings = new HashMap<String,String>();
    for(int i = 0; i < settings.length(); i++){
        String value = settings.getJSONObject(i).getString("value");
        String name = settings.getJSONObject(i).getString("name");
        applicationSettings.put(name, value);
    }

 JSONArray names= json.names();
    JSONArray values = json.toJSONArray(names);
    for(int i = 0 ; i < values.length(); i++){
        if(names.getString(i).equals("description")){
            setDescription(values.getString(i));
        }
        else if(names.getString(i).equals("expiryDate")){
            String dateString = values.getString(i);
            setExpiryDate(stringToDateHelper(dateString)); 
        }
        else if(names.getString(i).equals("id")){
            setId(values.getLong(i));
        }
        else if(names.getString(i).equals("offerCode")){
            setOfferCode(values.getString(i));
        }
        else if(names.getString(i).equals("startDate")){
            String dateString = values.getString(i);
            setStartDate(stringToDateHelper(dateString));
        }
        else if(names.getString(i).equals("title")){
            setTitle(values.getString(i));
        }
    }
于 2012-04-13T20:30:06.160 に答える