如何解析对象内的 2 个 JSON 数组

奥马尔·萨拉赫

我正在尝试使用以下信息解析 JSON,如您所见,它提供了一个具有值和 JSON 数组的 JSON 对象,如果排除了 JSON 对象(结果:1),我可以解析以下内容,但是当我尝试下面的代码并按下按钮来检索它没有提供任何数据的数据。

该 url 看起来与此类似,但包含大量数据:

{  
"result":1,
"data":[  
{  
"id":"1",
"langtitude":"31.3256632",
"latitude":"20.3256632",
"userNumber":"23",
"address":"adfsf",
"userFK":"1"
},
{  
"id":"2",
"langtitude":"31.3256632",
"latitude":"20.3256632",
"userNumber":"23",
"address":"adfsf",
"userFK":"1"
}
]
}

主Activity.Java

public class MainActivity extends AppCompatActivity {

private TextView tv_json;
private ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv_json = (TextView)findViewById(R.id.tv_json);

Button btn_parsJSON = (Button)findViewById(R.id.btn_parsJSON);

btn_parsJSON.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
new JSONTask().execute("I put the URL here");
}
});

}
public class JSONTask extends AsyncTask<String, String, String>{

@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("Please wait ...");
progressDialog.setMessage("Grabbing Data");
progressDialog.setCancelable(false);
progressDialog.show();

super.onPreExecute();
}

@Override
protected String doInBackground(String... urls) {
{
HttpURLConnection connection = null;
BufferedReader reader = null;

try {
URL url = new URL(urls[0]);
connection = (HttpURLConnection)url.openConnection();
connection.connect();

InputStream stream = connection.getInputStream();

reader = new BufferedReader(new InputStreamReader(stream));

StringBuffer buffer = new StringBuffer();


String line = "";

while((line = reader.readLine()) != null) {
buffer.append(line);
}
String finalJson = buffer.toString();

JSONObject parentObject = new JSONObject(finalJson);
JSONObject array = parentObject.getJSONObject("result");
JSONArray parentArray = array.getJSONArray("data");


StringBuffer finalBuffer = new StringBuffer();
for (int i = 0; i < parentArray.length(); i++) {


JSONObject finalObject = parentArray.getJSONObject(i);

double langtitude = finalObject.getDouble("langtitude");
double latitude = finalObject.getDouble("latitude");
int userNumber = finalObject.getInt("userNumber");
String address = finalObject.getString("address");
int userFK = finalObject.getInt("userFK");

finalBuffer.append(langtitude + "\n" + latitude + "\n" + userNumber + "\n" 
+ address + "\n" + userFK + "\n\n");
                }
return finalBuffer.toString();


} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
try {
if(reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
tv_json.setText(result);
progressDialog.dismiss();

}
}

}
本塔耶

当你做

JSONObject parentObject = new JSONObject(finalJson);
JSONObject array = parentObject.getJSONObject("result");
JSONArray parentArray = array.getJSONArray("data");

您正在寻找数据内部结果块。你不会在那里找到它。我认为你应该这样做:

JSONArray parentArray = parentObject.getJSONArray("data");

**编辑:**刚试过

String finalJson = "{  \n" +
        "\"result\":1,\n" +
        "\"data\":[  \n" +
        "{  \n" +
        "\"id\":\"1\",\n" +
        "\"langtitude\":\"31.3256632\",\n" +
        "\"latitude\":\"20.3256632\",\n" +
        "\"userNumber\":\"23\",\n" +
        "\"address\":\"adfsf\",\n" +
        "\"userFK\":\"1\"\n" +
        "},\n" +
        "{  \n" +
        "\"id\":\"2\",\n" +
        "\"langtitude\":\"31.3256632\",\n" +
        "\"latitude\":\"20.3256632\",\n" +
        "\"userNumber\":\"23\",\n" +
        "\"address\":\"adfsf\",\n" +
        "\"userFK\":\"1\"\n" +
        "}\n" +
        "]\n" +
        "}";

try {
    JSONObject reader = new JSONObject(finalJson);
    int result  = reader.getInt("result");
    JSONArray data  = reader.getJSONArray("data");

    Log.i("MYTAG", "reader:" + reader);
    Log.i("MYTAG", "result: "+result);
    Log.i("MYTAG", "data: "+data);

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

日志:

reader:{"result":1,"data":[{"id":"1","langtitude":"31.3256632","latitude":"20.3256632","userNumber":"23","address" :"adfsf","userFK":"1"},{"id":"2","langtitude":"31.3256632","latitude":"20.3256632","userNumber":"23","address" :"adfsf","userFK":"1"}]}

结果:1

数据:[{"id":"1","langtitude":"31.3256632","latitude":"20.3256632","userNumber":"23","address":"adfsf","userFK":"1 "},{"id":"2","langtitude":"31.3256632","latitude":"20.3256632","userNumber":"23","address":"adfsf","userFK":"1 "}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章