使用双方值解析JSON

时间:2016-07-05 09:24:30

标签: android json

我正在使用volley来获取API的响应,但响应包含STATE_ID:STATE_NAME对(i.e. value:value pair),我需要在不同的字符串中使用双方的值。我需要将这些值放入微调器中,以便当用户选择State时,我也可以获得相应的ID。

// JSON response
{
  "1": "West bengal",
  "3": "Himachal Pradesh",
  "4": "Maharashtra",
  "11": "Queensland"
}

我的代码

public class MainActivity extends AppCompatActivity {

    private static final String STATE = "MY_API";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void login(View v){
        loginRequest();
    }
    private void loginRequest() {

        StringRequest stringRequest = new StringRequest(Request.Method.POST, STATE,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("country_id","2");
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue.add(stringRequest);
    }
}

5 个答案:

答案 0 :(得分:3)

您已经在评论中讨论了iterate()方法。

完成一些工作以给你价值:

try {
        JSONObject jsonObject = new JSONObject(response);

        for (String key : iterate(jsonObject.keys()))
        {
            Toast.makeText(this, "Key : "+key+" Value: "+jsonObject.optString(key), Toast.LENGTH_SHORT).show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

请参考this answer中的iterate方法。我发布了这个作为一个新的答案,因为OP无法为价值观做出准备...... !!

答案 1 :(得分:2)

我使用迭代器来查找密钥。愿这有用:

 private void parseRespone(String response){

try {

JSONObject MainjsonObject = new JSONObject(response)

Iterator<String> iter= MainjsonObject.keys();
//To get keys of an object

    while (iter.hasNext()) 
    {

    String key = (String)iter.next();

            //Object value = jsonobj.get(key);  //To use by object

        String valueStr = jsonobj.get.getString(key);


    Log.i("Jsonparsing", "key= "+key + "\n Value=" +valueStr );

    Toast.makeText(getActivity(),"key= "+ key + "\n value= " + valueStr ,Toast.LENGTH_SHORT).show();        

    }

    } catch (JSONException e) {
        e.printStackTrace();
    }catch (Exception e) {
        e.printStackTrace();
    }
}

我可以找到一个未知的密钥。 请登录您的Android工作室登录... 在这里我也把Toast也放了..

在这里调用此函数......

...........
        @Override
                    public void onResponse(String response) {

            parseRespone(response);  //Function to parse json

                    }

谢谢..

答案 2 :(得分:1)

您可以使用jsonObject.names()(或keys()作为迭代器)来检索所有密钥。 之后,您可以使用键遍历数组并存储字符串。

https://developer.android.com/reference/org/json/JSONObject.html#names() https://developer.android.com/reference/org/json/JSONObject.html#keys()

答案 3 :(得分:1)

如果你考虑将你的回答改为这样的话会好得多:

[
  {"ID":"1","name": "West bengal"},
  {"ID":"3","name": "Himachal Pradesh"},
  {"ID":"4","name": "Maharashtra"},
  {"ID":"11","name": "Queensland"}
]

答案 4 :(得分:0)

我尝试了这个解决方案并且解决了问题。在这里,“关键”将向key_value [1,3,4,11]致敬,并且值将打印出名称[West bengal,Himachal Pradesh,Maharashtra,Queensland]。< / p>

JSONObject list_object = inner_json_object.getJSONObject(“”);

                for (String key : iterate(list_object.keys()))
                {
                    // here key will be containing your OBJECT NAME YOU CAN SET IT IN TEXTVIEW.
                    Toast.makeText(Activity.this, ""+key, Toast.LENGTH_SHORT).show();
                    String value = bank_list_object.optString(key);


                }`



private <T> Iterable<T> iterate(final Iterator<T> i){
    return new Iterable<T>() {
        @Override
        public Iterator<T> iterator() {
            return i;
        }
    };
}