1

次のjsonから値を取得するために使用Iterator<String> _names = _formObject.keys();していますが、取得した値は正しい順序で配置されていません。たとえば、「名前、番号、電話、性別」の順序で取得したため、jsonで正しい値を取得するにはどうすればよいですか?

{ "form" :{         
            "No" : {
                "type" : "text"
                  },
            "phone" : {
                "type" : "text"

            },
            "Name" : {
                "type" : "text"
            },
            "Sex" : {
                "type" : "radio"

             }
         }
       }
4

3 に答える 3

4

JSONオブジェクトのキーと値のペアには「正しい順序」はありません。ただし、JSON リーダーを手動で処理すると、シリアル化された順序が読み取られます。このアプローチは、ストリームがオブジェクト グラフ (内部で JSONObject のマップを使用する) に再構築されるに処理されるため、機能します。

生のJSON リーダーにアクセスするには、 JsonReaderを参照してください。ただし、取得した同等のJSON がこの順序で提供されるという保証はないことに注意してください。それは「機能します」が、(多数の) 同等の JSON 出力の 1 つに基づいて偽の脆弱性を作成します。

When JsonObject's keys are iterated they are not in the same order as in the response from the server で受け入れられた回答を参照してください。

JSON オブジェクトのキーの順序は、意味があるとは想定されていません。特定の順序が必要な場合は、 object ではなく配列を使用する必要があります

于 2014-04-11T06:09:18.950 に答える
0
if(result != null)
        {
            try
            {
                JSONObject jobj = result.getJSONObject("result");

                String status = jobj.getString("status");

                if(status.equals("true"))
                {
                    JSONArray array = jobj.getJSONArray("data");

                    for(int x = 0; x < array.length(); x++)
                    {
                        HashMap<String, String> map = new HashMap<String, String>();

                        map.put("name", array.getJSONObject(x).getString("header"));

                        map.put("date", array.getJSONObject(x).getString("date"));

                        map.put("description", array.getJSONObject(x).getString("description"));

                        list.add(map);
                    }

                }
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
        else
        {
            Toast.makeText(Calendar.this, "Network Problem", Toast.LENGTH_LONG).show();
        }

指定されたJSONから読み取っています

{
result: {
   data: [
  {
    header: "En övre rubrik här",
    date: "10 Apr,2014",
     description: "Test av en fin text. Om jag länkar. www.swerix.se Mer annat kanske.   0706300080 "
  },
  {
    header: "Info 3",
   date: "17 Apr,2014",
   description: "Detta är en ny information. Skrivet över även hej hopp"
  },
  {
  header: "testing news1",
  date: "13 Mar,2014",
  description: "this is testing news description12"
  }
  ],
  status: "true",
  description: "Data found"
}
于 2014-04-11T06:15:36.517 に答える
-1

あなたはこれを行うことができます-

Iterator<String> _names  = _formObject.keys();
        while (_names.hasNext()) {
            String key = _names.next();
            try {
                Object value = _formObject.get(key);
                if(value.equals("No"))
                { /*Do your stuff for No*/ }

                if(value.equals("phone"))
                { /*Do your stuff for phone*/ }

                if(value.equals("Name"))
                { /*Do your stuff for Name*/ }

                if(value.equals("Sex"))
                { /*Do your stuff for Sex*/ }

            } catch (JSONException e) {

            }
        }

したがって、前に登場した順序は関係ありません。あなたがしなければならないのは、どのキーがどの順序で必要かを で確認することだけです_formObject.get(key)

keys()a の関数はjsonObject、順序付けられたリストをそのまま提供しないことに注意してください。このように提案されたとおりに実行する必要があります。

于 2014-04-11T06:08:43.607 に答える