将JSONArray转换为JSONObject

时间:2016-08-21 10:04:48

标签: java android json

我正在尝试提取和处理一些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

error output

2 个答案:

答案 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。