【问题标题】:JSON parsing in android appandroid应用程序中的JSON解析
【发布时间】:2013-03-04 09:37:44
【问题描述】:

该网址有以下视图源。我需要解析和获取为“Folio”提供的图像路径。请任何人指导如何获取以下路径的数组。提前谢谢

     {"SEO":

  {"Marketing":["http://www.tts.com/media/imagepath/Web.jpg","http://www.tts.com/imagepath/ranks.jpg"],
      "Folio":["http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_a_grade_motor_school.html_a_poftfolio_2013_01_11.png",
                                   "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_abc_tarps.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_able_scale.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_accent_aluminum_windows.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_access_health.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_acmeda__zipscreen.html_a_poftfolio_2013_01_11.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_aditya_birla_minerals.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_advanced_corporate_badges.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_aerotech_fans.html_a_poftfolio_2013_01_10.png",
                                              "http://www.tts.com/media/imagepath/portfolio_images/http_arctictern.t.com.au_folio_portfolio_agriculture_victoria_services_.html_a_poftfolio_2013_01_10.png"]},

 "Services":{"Hosting":["http://www.tts.com/media/imagepath/hostinga.jpg","http://www.tts.com/media/imagepath/hostingb.jpg"],

  "Mobile Apps":["http://www.tts.com/media/imagepath/mobileapp.jpg","http://www.tts.com/media/imagepath/mobilesite.jpg"]

}


}

JSON 解析器类包含

public class JSONParser {

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

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

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

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException 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();

        } 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;

    }
}

主要活动包含

     public class AndroidJSONParsingActivity extends ListActivity {

    private static String url = "http://www.xyz.com/album_pro/array_to_encode";
    private static final String TAG_FOLIO = "SEO";
     JSONArray folio = null;
     @SuppressLint("NewApi")
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
              StrictMode.setThreadPolicy(policy);

            JSONParser jParser = new JSONParser();


            try{

                JSONObject json = jParser.getJSONFromUrl(url);
                Log.v("URL",json.toString());
            JSONObject seo = json.getJSONObject("SEO");
            Log.v("seo",seo.toString());
            JSONArray folio = json.getJSONArray("Folio");

            for(int i=0;i< folio.length();i++)
            {
                Log.v("Test", "test");
            }


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

}
}         

在 logcat 文件中运行应用程序后得到的错误如下

03-04 15:36:50.458: W/System.err(23230): org.json.JSONException: No value for Folio
03-04 15:36:50.458: W/System.err(23230):    at org.json.JSONObject.get(JSONObject.java:354)
03-04 15:36:50.458: W/System.err(23230):    at org.json.JSONObject.getJSONArray(JSONObject.java:544)
03-04 15:36:50.458: W/System.err(23230):    at com.example.testgallery.AndroidJSONParsingActivity.onCreate(AndroidJSONParsingActivity.java:37)
03-04 15:36:50.458: W/System.err(23230):    at android.app.Activity.performCreate(Activity.java:5008)
03-04 15:36:50.458: W/System.err(23230):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
03-04 15:36:50.458: W/System.err(23230):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

【问题讨论】:

  • 您提供的json无效。
  • @AnujMathur_07 有效,格式为 ??
  • 现在看来是有效的。

标签: java android json parsing arrays


【解决方案1】:

首先创建一个类似...的ArrayList

ArrayList<String> urlList = new ArrayList<String>();

从 JSONObject Marketing 获取 Folio JSONArray,例如...

JSONArray folio = marketing.getJSONArray("Folio");

现在将所有项目从 folio 放到 urlList 中,例如...

for(int i=0;i<folio.length();i++){
  urlList.add(folio.getString(i));
}

现在你可以使用这个 urlList。

【讨论】:

    【解决方案2】:

    试试这个

    JSONObject json = jParser.getJSONFromUrl(url);
    JSONObject seoObj = jObj.getJSONObject("SEO");
    JSONArray folioArr = seoObj.getJSONArray("Folio");
    ArrayList<String> image_urls = new ArrayList<String>();
    for (int i = 0; i < folioArr.length(); i++) {
    image_urls.add(folioArr.getString(i));
    }
    

    【讨论】:

      【解决方案3】:

      假设您在名为 stringSourceString 变量中有此 JSON。

      JSONObject json = new JSONObject(stringSource);
      JSONObject seo = json.getJSONObject("SEO");
      JSONArray folio = json.getJSONArray("Folio");
      

      然后使用JSONArray.getString(int index) 从数组中检索每个 URL。

      【讨论】:

        【解决方案4】:

        将您的回复转换为String

        然后

        JSONObject json = new JSONObject(response.toString());
        //Since Folio is an array
        JSONArray folio = json.getJSONArray("Folio");
        //Get Individual Links
        for(int i=0;i<folio.length();i++){
           //Fetch Your Code Here
           String image = folio.getString(i);
        
        }
        

        注意:我认为您收到了无效的 JSON 响应。我检查了你的回复here

        【讨论】:

          【解决方案5】:

          参加这门课

              public class GettingResponseFromUrl {
          
              public static String convertStreamToString(InputStream inputStream)
                      throws IOException {
                  if (inputStream != null) {
                      StringBuilder sb = new StringBuilder();
                      String line;
                      try {
                          BufferedReader reader = new BufferedReader(
                                  new InputStreamReader(inputStream, "UTF-8"));
                          while ((line = reader.readLine()) != null) {
                              sb.append(line).append("\n");
                          }
                      } finally {
                          inputStream.close();
                      }
                      return sb.toString();
                  } else {
                      return "";
                  }
              }
          
              public static String GetDataFromServer(String url, String method) {
                  url = url.replace(" ", "%20");
                  String Root_Response = null;
                  try {
                      HttpParams basicparams = new BasicHttpParams();
                      int timeoutConnection = 120000;
                      HttpConnectionParams.setConnectionTimeout(basicparams,
                              timeoutConnection);
                      DefaultHttpClient client = new DefaultHttpClient(basicparams);
                      URI uri = new URI(url);
                      HttpResponse res = null;
                      if (method.equalsIgnoreCase("POST")) {
                          HttpPost httpPost = new HttpPost(uri);
                          res = client.execute(httpPost);
                      } else if (method.equalsIgnoreCase("GET")) {
                          HttpGet httpGet = new HttpGet(uri);
                          res = client.execute(httpGet);
                      }
                      InputStream data = res.getEntity().getContent();
                      Root_Response = convertStreamToString(data);
          
                  } catch (ClientProtocolException e) {
                  } catch (IOException e) {
                      e.printStackTrace();
                  } catch (URISyntaxException e) {
                      e.printStackTrace();
                  }
                  return Root_Response;
              }
          
          }
          

          //比从下面的代码调用网络服务

          new GettingData().execute();
          
              private class GettingData extends AsyncTask<String, String, String> {
          
                  private ProgressDialog progressDialog;
                      private String response;
          
                  @Override
                  protected void onPreExecute() {
          
                      super.onPreExecute();
                      progressDialog = new ProgressDialog(mContext);
                      progressDialog.setMessage("Loading ...");
                      progressDialog.setIndeterminate(false);
                      progressDialog.setCancelable(true);
                      progressDialog.show();
          
                  }
          
                  @Override
                  protected String doInBackground(String... args) {
          try {
                      Response = GettingResponseFromUrl
                              .GetDataFromServer(URL, "POST");
                      Log.e("Response", Response);
                  } catch (Exception e) {
                  }
                      runOnUiThread(new Runnable() {
                          @Override
                          public void run() {
          
          
                          }
                      });
                      return null;
                  }
          
                  @Override
                  protected void onPostExecute(String args) {
                      progressDialog.dismiss();
          
                  }
              }
          

          【讨论】:

            【解决方案6】:

            看看这个免费提供的工具

            Android Class Creator tool

            它的教程是它。它非常易于使用。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-02-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多