JSONObject 无法转换为字符串

Posted

技术标签:

【中文标题】JSONObject 无法转换为字符串【英文标题】:JSONObject cannot be converted to String 【发布时间】:2021-11-15 07:29:04 【问题描述】:

我在 Stack 中多次看到这个问题,但没有运气。问题是,我使用这个 API 来验证我的 CNPJ 字段,如果我有连接,响应将是字段“nome”并填充我的 textview 字段。

到目前为止一切顺利,JSON 是有效的(已在 jsonformatter 中传递),但我无法通过 JSONArray 找到对象,当我设法通过 JSONObject 找到它时,它告诉我无法转换为 String。

 valide.setOnClickListener(view1 -> 
        //String PJ = cnpj.getText().toString();
        String PJ = "06990590000123";
        String url = "https://www.receitaws.com.br/v1/cnpj/" + PJ;
        jsonParse(url);
    );


private void jsonParse(String url) 
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() 

        String json;
        @Override
        public void onResponse(JSONObject response) 
            try 
                json = response.getJSONObject("nome").toString();

                razao.append(json);
                razao.setText(json);

             catch (JSONException e) 
                e.printStackTrace();
                Toast.makeText(getActivity(), "Invalid ! ", Toast.LENGTH_SHORT).show();
            
        
    , new Response.ErrorListener() 
        @Override
        public void onErrorResponse(VolleyError erro) 
            erro.printStackTrace();
        
    );

    mQueue.add(request); //Volley.newRequestQueue

JSON

 "atividade_principal": [  "text": "Portais, provedores de conteúdo e outros serviços de informação na internet", "code": "63.19-4-00"  ],

"data_situacao": "01/09/2004",

"complemento": "ANDAR 17A20 TSUL 2 17A20", "tipo": "MATRIZ",

**"nome": "GOOGLE BRASIL INTERNET LTDA.", //Need this field**

"uf": "SP",

"telefone": "(11) 2395-8400",

"email": "googlebrasil@google.com",

日志

org.json.JSONException:值 GOOGLE BRASIL INTERNET LTDA。在没有 类型 java.lang.String 无法转换为 JSONObject 在 org.json.JSON.typeMismatch(JSON.java:101)

使用的网址

https://www.receitaws.com.br/v1/cnpj/06990590000123

有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

JSON 中的“nome”属性是字符串值,不是对象值。所以你应该有:json = response.getString("nome"); 感谢乔恩的回复,但没有成功!仍然遇到同样的错误! 请你试试你尝试过的东西好吗? 编辑我使用的 onclick 问题 @Marrows Change 不在 JS 中。它在 Java 代码中。请参考下面的答案。 【参考方案1】:

在您的 JSON 中,nome 是字符串类型。所以不要使用getJSONObject 使用来自JSONObject 类的getString 方法。所以你的代码应该如下所示:

private void jsonParse(String url) 
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() 

        String json;
        @Override
        public void onResponse(JSONObject response) 
            try 
                json = response.getString("nome"); // Here is the change

                razao.append(json);
                razao.setText(json);

             catch (JSONException e) 
                e.printStackTrace();
                Toast.makeText(getActivity(), "Invalid ! ", Toast.LENGTH_SHORT).show();
            
        
    , new Response.ErrorListener() 
        @Override
        public void onErrorResponse(VolleyError erro) 
            erro.printStackTrace();
        
    );

    mQueue.add(request); //Volley.newRequestQueue

【讨论】:

工作!非常感谢,高拉夫! @Marrows:嗯,这和我说的不完全一样,你说的错误是一样的吗? 对不起,乔恩!我误解了你让我做什么!也感谢您的帮助!【参考方案2】:

试试这个: 先构造JsonObject,然后得到key的字符串值。

JSONObject jsonObject = new JSONObject(json);
String valueIWanted = jsonObject.getString("nome"))

【讨论】:

以上是关于JSONObject 无法转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

解析为对象而不是数组时出现Json错误:JSONObject中的getJSONObject(java.lang.String)无法应用于(int)

AsyncTask #3 解析 JSON 对象时出错。字符串无法转换为 JSONObject

org.json.JSONObject 类型的值无法转换为 JSONArray

Gson:直接将String转换为JsonObject(无POJO)

org.json.JSONObject$1 类型的值 null 无法转换为 JSONObject

如何修复 JSONObject 无法转换为 JSONArray