0

私はこれをしばらくいじっていて、助けを求めています。をArrayListに変えて のJSONArray中に入れJSONObjectます。問題は私のフォーマットです。お見せしましょう。

my の値を取得し、ArrayListそのように追加します (小さなコード スニペット)

if (v instanceof EditText) {
        String answer = ((EditText) v).getText().toString();
        if (answer.equals("")) {
        error.setText(v.getTag().toString()
            + " Needs an answer");
        ((EditText) v).setHint("Fill me out!");
        ((EditText) v).setHintTextColor(getResources()
            .getColor(R.color.red_bg));
        } else {
            error.setText("");
        }
        String question = v.getTag().toString();
        String combo = question + ": " + answer;
        myList.add(combo);
        Log.v("INFO", "Storing: " + combo);
}

これは機能しますが、「:」を追加すると問題が発生します。ログが出力されます

06-19 12:13:33.630: V/INFO(3272): Storing: Height: 6`4

JSON送信するものを作成するときは、次を使用します

if (error.getText().toString().equals("")) {
    JSONObject json = new JSONObject();
    JSONArray jArray = new JSONArray(myList);
    try {
       json.putOpt("array", jArray);
    } catch (JSONException e) {
       e.printStackTrace();
    }

繰り返しますが、これは機能します。問題が明確に示され、次のように出力されJSONます

{
  "array":
  [
    "Store #: 00608",
    "Phone #: null",
    "Address: 3014 N. SCOTTSDALE RD.",
    "City: SCOTTSDALE",
    "Zip: 85251",
    "State: AZ",
    "Height: 6`4",
    "Weight: 230",
    "Ethnicity: White",
    "Age: 23",
    "Eye Color: Blue",
    "Favorite Food: Thai",
    "Comments: awesome"
   ]
}

あなたがよくJSON知っているなら、私がここでそれをだましていたことを知っています. 私は単に質問と答えを一緒にしようとしていた. keyただし、途中に「:」を追加することで、質問を (一種の)として、回答を(一種の) として使用しようとしているように見えますvalue。とにかく、最終的にはこれは合法のように見えますがJSON、そうですが、必要な方法で機能しません。

key私の質問は、「質問」を 、「回答」を にするべきvalueですか?

もしそうなら、私がこのように見えるようJSONArrayに私を作成するにはどうすればよいですかJSON

{
  "array":
  [
    "Store #" :  "00608",
    "Phone #" : "null",
    "Address" : "3014 N. SCOTTSDALE RD.",
    "City" : "SCOTTSDALE",
    "Zip" : "85251",
    "State" : "AZ",
    "Height" : "6`4",
    "Weight" : "230",
    ....
   ]
}

そのため、単純な

var_dump(json_decode($json));
var_dump(json_decode($json, true));

で、PHPサーバー側で必要なデータが提供されます。

または、この形式を維持し、サーバー側で解析するときに文字列を分割する方が簡単でしょうか? どちらの回答を選択しても、回答を説明するために数行のコードを提供してください。お察しの通り、私はビジュアル派です。

助けてくれてありがとう、これが将来他の人にも役立つことを願っています!

4

3 に答える 3

1

これはさまざまな方法で解決できます。フォーマットをそのまま維持したい場合は、最初に文字列を処理するだけです。ArrayListコンボを部分に分割するだけで値を取得すると

int splitPoint = combo.indexOf(":")
String key = combo.substring(0, splitPoint);
String value = combo.substring(splitPoint + 1);

キーと値を分割したら、新しいJSONObjectキーと値を文字列として追加するだけです

JSONObject jObject = new JSONObject();
jObject.put(key, value);

これにより、JSONString が独自の JSONObject に追加されます。次に、作成する JSONArray にこのオブジェクトを追加できます。

JSONArray jArray = new JSONArray();
jArray.puJSONObject(jObject);

これをいくつかのパーツに分解しましたが、外側にJSONArrayfor ループまたは他のイテレータを宣言して をループし、ArrayList各コンボ文字列を処理し、結果のオブジェクトを に追加するJSONArrayだけで、目的の結果を得ることができます

于 2013-06-19T18:57:13.430 に答える
1

JSONで次のことができるかどうかわかりません

[ "key":"value, ...."].

次のように、キーと値のオブジェクトのペアを使用して実行できる場合があります。

[ {"key":"value"},...]

オブジェクトで行う場合、ペアごとに新しいオブジェクトを作成する必要があり、JSON のキーがインスタンス変数の名前に対応するため、かなり複雑になる可能性があります。

私の提案は、現在の状態のままにして、文字列を分割することです。私は PHP に精通していませんが、JSON 配列をループして、文字列に対して split(':') のようなものを呼び出すのと同じくらい簡単なはずです。

于 2013-06-19T18:16:09.373 に答える