GVKun编程网logo

get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject

10

在本文中,我们将为您详细介绍getJSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject的相关知识,此外,我们还会提供一些关于andro

在本文中,我们将为您详细介绍get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject的相关知识,此外,我们还会提供一些关于android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject、android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray、ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android、com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题的有用信息。

本文目录一览:

get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject

get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject

我已经开发了一个Android应用程序,该应用程序从服务器发送以JSON格式响应的位置坐标(目前仅发送两个位置):

这是来自服务器的PHP代码:

$place = $db->getCoordinates($name);
if ($place != false) {

     $response[1]["success"] = 1;
     $response[1]["place"]["H"] = $place[1]["H"];
     $response[1]["place"]["V"] = $place[1]["V"];
     $response[1]["place"]["placeid"] = $place[1]["placeid"];
     $response[1]["place"]["name"] = $place[1]["name"];
     $response[1]["place"]["type"] = $place[1]["type"];
     $response[1]["place"]["note"] = $place[1]["note"];
     // place found
     // echo json with success = 1
     $response[2]["success"] = 1;
     $response[2]["place"]["H"] = $place[2]["H"];
     $response[2]["place"]["V"] = $place[2]["V"];
     $response[2]["place"]["placeid"] = $place[2]["placeid"];
     $response[2]["place"]["name"] = $place[2]["name"];
     $response[2]["place"]["type"] = $place[2]["type"];
     $response[2]["place"]["note"] = $place[2]["note"];
     echo json_encode($response);
} 

当应用获取坐标时,它将尝试通过以下方式解析坐标:

            JSONObject json_places = userFunction.getPlaces();
            JSONObject  places = json_places.getJSONObject("1");
            JSONObject  coord = places.getJSONObject("place");

getplaces():

public JSONObject getPlaces(){
    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", allcoordinates_tag));
    JSONObject json = jsonParser.getJSONFromUrl("http://"+ip+placesURL, params);
    // return json
    Log.i("JSON", json.toString());
    return json;
}

JSONParser:

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

        // Making HTTP request
        try {
            // defaultHttpClient
            HttpPost httpPost = new HttpPost(url);
            HttpParams httpParameters = new BasicHttpParams();
            int timeoutConnection = 9000;
            httpconnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
            int timeoutSocket = 9000;
            httpconnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);

            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            httpentity httpentity = httpResponse.getEntity();
            is = httpentity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printstacktrace();
        }
        catch (ConnectTimeoutException e) {

            e.printstacktrace();
        }
        catch (ClientProtocolException e) {
            e.printstacktrace();
        } catch (Exception e) {
            e.printstacktrace();
        } 


        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
            Log.e("JSON", json);
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);            
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

这是带有错误的JSON:

当应用程序尝试解析JSON响应时,它崩溃并发送JSONException:类型java.lang.String的值无法转换为JSONObject
我该如何解决?
谢谢

解决方法:

您的Web服务未创建有效的JSON. JSON字符串只能以{或[开头.您以字符串“ Array”开始.

您可以在Wikipedia条目here中了解有关JSON格式的信息.

android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject

android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject

在这里,我想使用API​​密钥显示 JSON内容.但我无法获得身份验证.

我在JsonObject中收到错误:

org.json.JSONException: Value Authorization of type java.lang.String cannot be converted to JSONObject

在我的Android应用程序中,我只是传递API密钥和URL id以获取以下URL中的JSON响应.我使用JSON数组显示JSON内容.

但如果我:

public class AndroidAPiActivity extends Activity {

/*
 * FlickrQuery = FlickrQuery_url
 * + FlickrQuery_per_page
 * + FlickrQuery_nojsoncallback
 * + FlickrQuery_format
 * + FlickrQuery_tag + q
 * + FlickrQuery_key + FlickrApiKey
 */

String FlickrQuery_url = "http://192.138.11.9/api/interests/";
String FlickrQuery_per_page = "&per_page=1";
String FlickrQuery_nojsoncallback = "&nojsoncallback=1";
String FlickrQuery_format = "&format=json";
String FlickrQuery_tag = "&tags=";
String FlickrQuery_key = "&api_key=";

// Apply your Flickr API:
// www.flickr.com/services/apps/create/apply/?
   String FlickrApiKey = "f65215602df8f8af";

   EditText searchText;
   Button searchButton;
   TextView textQueryResult,textJsonResult;
   ImageView imageFlickrPhoto;
   Bitmap bmFlickr;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       searchText = (EditText)findViewById(R.id.searchtext);
       searchButton = (Button)findViewById(R.id.searchbutton);
       textQueryResult = (TextView)findViewById(R.id.queryresult);
       textJsonResult = (TextView)findViewById(R.id.jsonresult);
       imageFlickrPhoto = (ImageView)findViewById(R.id.flickrPhoto);
       searchButton.setonClickListener(searchButtonOnClickListener);
   }

   private Button.OnClickListener searchButtonOnClickListener
   = new Button.OnClickListener(){

 public void onClick(View arg0) {
  // Todo Auto-generated method stub
  String searchQ = searchText.getText().toString();
  String searchResult = QueryFlickr(searchQ);
  textQueryResult.setText(searchResult);
  String jsonResult = ParseJSON(searchResult);
  textJsonResult.setText(jsonResult);

  if (bmFlickr != null){
   imageFlickrPhoto.setimageBitmap(bmFlickr);
  }
 }};

   private String QueryFlickr(String q){

    String qResult = null;

    String qString =
      FlickrQuery_url
      + FlickrQuery_per_page
      + FlickrQuery_nojsoncallback
      + FlickrQuery_format
      + FlickrQuery_tag + q 
      + FlickrQuery_key + FlickrApiKey;

    HttpClient httpClient = new DefaultHttpClient();
       HttpGet httpGet = new HttpGet(qString);

       try {
  httpentity httpentity = httpClient.execute(httpGet).getEntity();

  if (httpentity != null){
   InputStream inputStream = httpentity.getContent();
   Reader in = new InputStreamReader(inputStream);
   BufferedReader bufferedreader = new BufferedReader(in);
   StringBuilder stringBuilder = new StringBuilder();

   String stringReadLine = null;

   while ((stringReadLine = bufferedreader.readLine()) != null) {
    stringBuilder.append(stringReadLine + "\n");
    }

   qResult = stringBuilder.toString();

  }

 } catch (ClientProtocolException e) {
  // Todo Auto-generated catch block
  e.printstacktrace();
 } catch (IOException e) {  
  // Todo Auto-generated catch block
  e.printstacktrace();
 }

       return qResult;
   }

   private String ParseJSON(String json){

    String jResult = null;
    bmFlickr = null;
    String key_id;
    String category;
    String subcategory;
    String title;
    String icon_image;

    try
     {
  JSONObject JsonObject = new JSONObject(json);
  JSONObject Json_photos = JsonObject.getJSONObject("interests");
  JSONArray JsonArray_photo = Json_photos.getJSONArray("interest");

  //We have only one photo in this exercise
  JSONObject FlickrPhoto = JsonArray_photo.getJSONObject(0);

  key_id = FlickrPhoto.getString("row_key");
  category = FlickrPhoto.getString("category");
  subcategory = FlickrPhoto.getString("subcategory");
   title = FlickrPhoto.getString("title");

  jResult = "\n key_id: " + key_id + "\n"
    + "category: " + category + "\n"
    + "subcategory: " + subcategory + "\n"
    + "title: " + title + "\n";

  bmFlickr = LoadPhotoFromFlickr(key_id,category,subcategory,title);

 } catch (JSONException e) {
  // Todo Auto-generated catch block
  e.printstacktrace();
 }

    return jResult;
   }

   private Bitmap LoadPhotoFromFlickr(
     String key_id,String category,String subcategory,String title){
    Bitmap bm= null;

    String icon_image = null;
 //   String FlickrPhotoPath ="";
   String FlickrPhotoPath ="http://182.72.180.34/media/"+icon_image+".jpg";

    URL FlickrPhotoUrl = null;

    try {

  FlickrPhotoUrl = new URL(FlickrPhotoPath);

  HttpURLConnection httpconnection = (HttpURLConnection) FlickrPhotoUrl.openConnection();
  httpconnection.setDoInput(true);
  httpconnection.connect();
  InputStream inputStream = httpconnection.getInputStream();
  bm = BitmapFactory.decodeStream(inputStream);

 } catch (MalformedURLException e) {
  // Todo Auto-generated catch block
  e.printstacktrace();
 } catch (IOException e) {
  // Todo Auto-generated catch block
  e.printstacktrace();
 }

    return bm;
   }
}

解决方法

更新:

基于HTML响应,我可以告诉你这不是JSON.该响应告诉我您的Web服务的URL不正确.

您需要检查您的网址.

额外信息/上一个答案:

看起来简单的答案是正确的 – 您的结果不是有效的JSON字符串.有关JSON应该是什么样的详细信息,请参见JSON.org网站.

查看JSON Parser Online – 我发现它在使用JSON时非常有用.

很奇怪你正在请求JSON,它没有正确地返回它 – 也许我错过了一些东西.

android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray

android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray

我正在编写一个打算在 Android设备上运行的应用程序.应用程序通过PHP读取MysqL数据库中的信息,但是当我运行应用程序时,Log cat会提示错误’错误解析数据org.json.JSONException:Value

我得到的代码是从教程中下载的,请耐心等待我已经掌握了一些基本的PHP知识和很少的java知识.我已经测试了PHP脚本,它运行完美,所以我不会费心去附上它.

main.java代码:

 package test.an2MysqL;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.httpentity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;


public class main extends Activity {
/** Called when the activity is first created. */

   TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Create a crude view - this should really be set via the layout resources 
    // but since its an example saves declaring them in the XML. 
    LinearLayout rootLayout = new LinearLayout(getApplicationContext()); 
    txt = new TextView(getApplicationContext()); 
    rootLayout.addView(txt); 
    setContentView(rootLayout); 

    // Set the text and call the connect function. 
    txt.setText("Connecting...");
  //call the method to run the data retreival
    txt.setText(getServerData(KEY_121));



}
public static final String KEY_121 = "http://10.1.1.19/cms/test/android2MysqL/read.PHP"; //i use my real ip here



private String getServerData(String returnString) {

   InputStream is = null;

   String result = "";
    //the data to send
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("country","undefined"));

    //http post
    try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(KEY_121);
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            httpentity entity = response.getEntity();
            is = entity.getContent();

    }catch(Exception e){
            Log.e("log_tag","Error in http connection "+e.toString());
    }

    //convert response to string
    try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
    }catch(Exception e){
            Log.e("log_tag","Error converting result "+e.toString());
    }
    //parse json data
    try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                    JSONObject json_data = jArray.getJSONObject(i);
                    Log.i("log_tag","id: "+json_data.getInt("id")+
                            ",country: "+json_data.getString("country")+
                            ",documentn: "+json_data.getInt("documentn")
                    );
                    //Get an output to the screen
                    returnString += "\n\t" + jArray.getJSONObject(i);
       }
    }catch(JSONException e){
            Log.e("log_tag","Error parsing data "+e.toString());
    }
    return returnString;
}   

}

我很感激你能给我的任何帮助.

解决方法

正如您对问题的评论中所指出的那样,您的服务器似乎正在返回XML而不是JSON.您只需输出结果即可轻松确认:

}catch(JSONException e){
    Log.e("log_tag","Error parsing data "+e.toString());
    Log.e("log_tag","Failed data was:\n" + result);
}

如果它是XML,它几乎肯定是必须的,那么你需要让服务器输出JSON,或者你需要解析它发送给你的XML.

ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android

ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android

在我的应用程序中,我需要将arraylist转换为数组的字符串。但是,我得到一个错误:

ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] android

在与listofurls我在一起的错误:listofurls = (String[])image_urls.toArray();

这是完整的代码:

public class Test2 extends AsyncTask<Void,Void,Void> 
{
  String[] listofurls ;
  private static final String url = "http://www.tts.com/album_pro/array_to_encode";
  JSONParser jParser = new JSONParser();
  ArrayList<String> image_urls = new ArrayList<String>();

  protected void onPreExecute() {
    //Log.e(LOG_CLASS,"in side assyntask");
  }

  protected Void doInBackground(Void... voids) {
    Log.v("Async","Async");
    JSONObject json = jParser.getJSONFromUrl(url);

    try {
      JSONObject seo = json.getJSONObject("SEO");
      JSONArray folio = seo.getJSONArray("Folio");

      // JSONArray image_urls1 = new JSONArray();
      //String s1=seo.getString("Folio");

      for(int i=0;i<folio.length();++i) {
        String m = folio.getString(i);
        Log.v("M"+i,m);
        image_urls.add(m);
        Log("test-url"+image_urls);
      }
    } catch(Exception e) {
      e.printStackTrace();
    }

    listofurls = (String[])image_urls.toArray();  //ERROR OCCURS HERE

    return null;
  }

  private void Log(String string) {
    Log.v("Test",string);
  }

  protected void onProgressUpdate(Integer... progress) { }

  protected void onPostExecute(Void result) {
    mAdapter = new ImagePagerAdapter(getSupportFragmentManager(),listofurls.length );
    mAdapter.setImageurls(listofurls);
    mPager.setAdapter(mAdapter);
  }

com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题

com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题

您正在将答案(optionAoptionB等)存储为数字,并存储在Question1中,但是您正在尝试将其转换为字符串。

如果您直接访问DataSnapshot值,则可以使用以下方法获取对象:

myRef.child("SETS").child(category).child("Questions").orderByChild("setNo").equalTo(setNo).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
            Log.i("Database",snapshot.child("optionA").getValue();
        }

如果要将选项放入Java类中,唯一的方法是将所有答案声明为Object

public class QuestionsModel {

    private Object optionA,optionB,optionC,optionD,correctAns;
    private int setNo;
    private String question;

    public QuestionsModel(){

    }

    public QuestionsModel(String question,String optionA,String optionB,String optionC,String optionD,String correctAns,int setNo) {
        this.setNo = setNo;
        this.question = question;
        this.optionA = optionA;
        this.optionB = optionB;
        this.optionC = optionC;
        this.optionD = optionD;
        this.correctAns = correctAns;

    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public Object getOptionA() {
        return optionA;
    }

    public void setOptionA(Object optionA) {
        this.optionA = optionA;
    }

    public Object getOptionB() {
        return optionB;
    }

    public void setOptionB(Object optionB) {
        this.optionB = optionB;
    }

    public Object getOptionC() {
        return optionC;
    }

    public void setOptionC(Object optionC) {
        this.optionC = optionC;
    }

    public Object getOptionD() {
        return optionD;
    }

    public void setOptionD(Object optionD) {
        this.optionD = optionD;
    }

    public Object getCorrectAns() {
        return correctAns;
    }

    public void setCorrectAns(Object correctAns) {
        this.correctAns = correctAns;
    }

    public int getSetNo() {
        return setNo;
    }

    public void setSetNo(int setNo) {
        this.setNo = setNo;
    }
}

但是通常,我建议在数据库中修复Question1的答案类型,并将其存储为字符串值。

今天关于get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject的介绍到此结束,谢谢您的阅读,有关android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject、android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray、ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android、com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题等更多相关知识的信息可以在本站进行查询。

本文标签: