【问题标题】:how to parse json result without array name in android如何在android中解析没有数组名的json结果
【发布时间】:2016-04-23 02:46:08
【问题描述】:

我正在尝试解析没有数组名称的 json 结果。我尝试了不同的方法,但它们都不起作用这些是我的代码。 所以请有人告诉我如何在不使用数组名的情况下解析 json 结果

提前致谢。

我的 JSON

[{"id":"710","name":"app","address":"k","gender":"h"}]

我正在尝试解析这个 JSON

{"employees":[{"id":"710","name":"app","address":"k","gender":"h"}]}

我希望是这样的

private class CheckList extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog mProgressDialog;

    @Override
    protected void onPreExecute() {

        mProgressDialog = new ProgressDialog(Main2Activity.this);
        // Set progressdialog title
        mProgressDialog.setTitle("Please Wait");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();

        super.onPreExecute();

        Main2Activity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {


            }
        });


    }

    @Override
    protected JSONObject doInBackground(String... args) {
        final JParserAdv jParser = new JParserAdv();
        JSONObject json = jParser.makeHttpRequest("http://afkdemo.glabsapps.com/insertwebservice.asmx/getData?id=710", "GET", null);
        return json;

    }

    @Override
    protected void onPostExecute(JSONObject json) {
        ArrayList<ITEM> data=new ArrayList<ITEM>();
        try {
            //need to insert array name here but json result I'm using is without array name.
            JSONArray arr = json.getJSONArray("arrayname");
            for(int i=0;i<arr.length();i++) {
                ITEM d = new ITEM();
                d.item_rank = ((JSONObject) arr.get(i)).get("id").toString();
                d.item_name = ((JSONObject) arr.get(i)).get("name").toString();
                d.item_population = ((JSONObject) arr.get(i)).get("address").toString();
                data.add(d);
            }
            My_adapter adapter = new My_adapter(Main2Activity.this, data);
            listView.setAdapter(adapter);
            mProgressDialog.dismiss();
        }catch (Exception ex){ex.printStackTrace();}

    }

}

【问题讨论】:

  • 您能否发布一个您尝试解析的示例 JSON。那时我们会更容易回答。谢谢。
  • [{"id":"710","name":"app","address":"k","gender":"h"}] 我正在尝试解析这个JSON {"employees":[{"id":"710","name":"app","address":"k","gender":"h"}]} 我希望它是这样的

标签: android arrays json


【解决方案1】:

首先将Employees放入一个数组中。

然后获取 index=0 处的对象。这应该可以解决问题!

例如:

JSONArray employees = json.optJSONArray("employees");
JSONObject anEmployee = employees.optJSONObject(0);

【讨论】:

    【解决方案2】:

    您请求的端点似乎返回了一个如下所示的 JSON 结构:

    [
      {
        id: "710",
        name: "app",
        address: "k",
        gender: "h"
      }
    ]
    

    由于您的根没有标识符,请尝试在您的 doInBackground() 方法中返回一个数组作为根。

    private class CheckList extends AsyncTask<String, String, JSONArray> {
    
        ...
    
        @Override
        protected JSONArray doInBackground(String... args) {
            final JParserAdv jParser = new JParserAdv();
            JSONArray json = jParser.makeHttpRequest("http://afkdemo.glabsapps.com/insertwebservice.asmx/getData?id=710", "GET", null);
            return json;
        }
    
        @Override
        protected void onPostExecute(JSONArray json) {
            ...
        }
    }
    

    我不确定JParseAdv API 是什么样的,但希望有办法让它返回一个数组作为 JSON 结构的根。

    【讨论】:

    • 我的代码中没有类似 json.getAsJsonArray 的方法
    • 糟糕。我以为你在使用 GSON 库。我会更新我的答案。
    • 没有标识符有没有其他方法解析
    • 我更新了我的答案。你有没有尝试过这个建议?
    • 不知道如何在 doInBackground() 方法中以 root 身份重新调用数组。
    【解决方案3】:

    我有同样的问题。以下代码对我有用:

    public class MainActivity extends AppCompatActivity {
        private TextView textView;
        private RequestQueue queue;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        textView = findViewById(R.id.text_view_result);
        Button buttonParse = findViewById(R.id.button_parse);
    
        queue = Volley.newRequestQueue(this);
    
        buttonParse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                jsonParse();
            }
        });
    }
    
    
    private void jsonParse() {
    
        String url = "http://10.216.70.19:8080/restServices/webapi/services/getAGVStatusList"; //This is my Json url
        StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                //weatherData.setText("Response is :- ");
                parseData(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                textView.setText("Data Not Received");
    
            }
        });
    
        queue.add(request);
        super.onStart();
    }
    
    private void parseData(String response) {
        try {
            // Create JSOn Object
            JSONArray jsonArray = new JSONArray(response);
            for (int i = 0; i <jsonArray.length() ; i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                textView.setText(jsonObject.getString("batteryLevel")); //get the desired information from the Json object
    
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多