我正在尝试提取和处理一些JSON数据,但是当我尝试时它是错误的。这是我的代码:
protected void onPostExecute(String s) {
String err=null;
try {
JSONObject root = new JSONObject(s);
JSONObject user_data = root.getJSONObject("user_data");
LASTNAME = user_data.getString("lastname");
PASSWORD = user_data.getString("password");
EMAIL = user_data.getString("email");
} catch (JSONException e) {
e.printStackTrace();
err = "Exception: "+e.getMessage();
}
Intent i = new Intent(ctx, MainActivity.class);
i.putExtra("lastname", LASTNAME);
i.putExtra("email", EMAIL);
i.putExtra("password", PASSWORD);
i.putExtra("err", err);
startActivity(i);
}
但这是错误:
org.json.JSONException:org.json.JSONArray类型的user_data上的值[]无法转换为JSONObject
答案 0 :(得分:1)
我认为你将Array转换为Object有问题。
[..]表示它是JSONArray。
{..}表示它是JSONObject。
// inside dialogController
showAlert(ev) {
this.mdDialog.show({
template:"<loader my-master="+this.masterCtrl+"></loader>"
});
// when debugging, I saw this.masterCtrl is exist as Object
//inside loader Controller:
export function loader() {
'ngInject';
let directive = {
templateUrl: "app/components/excelLoader/loader.html",
controller: loaderController,
controllerAs: 'vm',
scope: {
words: '=',
master:'=myMaster'
},
replace: true,
bindToController: true,
link: linkFunc
};
function linkFunc(scope, element, attr, ctrl) {
let vm = scope.vm;
ctrl.master=attr.myMaster;
}
return directive;
}
class loaderController {
constructor() {
'ngInject';
console.log(this.master); //prints string "this.masterCtrl" instead of the Object!
}
}
如果你在寻找价值需要你迭代所有的JSONArray 做一些简单的循环。
try {
JSONArray jObj = new JSONArray(json);
//This is how you get value from 1 element in JSONArray
String firstObjectValue = jObj.getString(0);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
答案 1 :(得分:-1)
您的“user_data”似乎是以json数组而非您尝试访问的json对象。
您可以使用root.optJSONObject("user_data")
来确定&amp;如果你的user_data是json对象,则返回json对象,否则返回null。