2016-03-01 108 views
-2

因此我的应用程序有一个小错误阻止了我进行货币转换。将JSONObject转换为JSONArray的问题

03-01 03:56:05.810 18853-18870/com.example.justin.currencyconverter20 D/JSON Parser: result: {"base":"SGD","date":"2016-02-29","rates":{"AUD":0.99576,"BGN":1.2762,"BRL":2.8316,"CAD":0.96359,"CHF":0.71217,"CNY":4.6559,"CZK":17.655,"DKK":4.868,"GBP":0.51276,"HKD":5.5237,"HRK":4.9764,"HUF":203.11,"IDR":9500.4,"ILS":2.7769,"INR":48.537,"JPY":80.352,"KRW":879.31,"MXN":12.92,"MYR":2.9931,"NOK":6.2018,"NZD":1.0804,"PHP":33.68,"PLN":2.8413,"RON":2.9205,"RUB":53.927,"SEK":6.0828,"THB":25.336,"TRY":2.1059,"USD":0.71047,"ZAR":11.391,"EUR":0.65253}} 
03-01 03:56:05.811 18853-18870/com.example.justin.currencyconverter20 E/JSON Parser: Error parsing data org.json.JSONException: Value {"AUD":0.99576,"BGN":1.2762,"BRL":2.8316,"CAD":0.96359,"CHF":0.71217,"CNY":4.6559,"CZK":17.655,"DKK":4.868,"GBP":0.51276,"HKD":5.5237,"HRK":4.9764,"HUF":203.11,"IDR":9500.4,"ILS":2.7769,"INR":48.537,"JPY":80.352,"KRW":879.31,"MXN":12.92,"MYR":2.9931,"NOK":6.2018,"NZD":1.0804,"PHP":33.68,"PLN":2.8413,"RON":2.9205,"RUB":53.927,"SEK":6.0828,"THB":25.336,"TRY":2.1059,"USD":0.71047,"ZAR":11.391,"EUR":0.65253} at rates of type org.json.JSONObject cannot be converted to JSONArray 

这里是我的JSONParser:

package com.example.justin.currencyconverter20; 

import android.util.Log; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.HashMap; 

public class JSONParser { 

    String charset = "UTF-8"; 
    HttpURLConnection conn; 
    DataOutputStream wr; 
    StringBuilder result; 
    URL urlObj; 
    JSONArray Obj = null; 
    StringBuilder sbParams; 
    String paramsString; 


    public JSONArray makeHttpRequest(String url, String method) { 

     int i = 0; 

     if(method.equals("GET")){ 

      try { 
       urlObj = new URL(url); 

       conn = (HttpURLConnection) urlObj.openConnection(); 

       conn.setDoOutput(false); 

       conn.setRequestMethod("GET"); 

       conn.setConnectTimeout(15000); 

       conn.connect(); 

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

     } 

     try { 
      //Receive the response from the server 
      InputStream in = new BufferedInputStream(conn.getInputStream()); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
      result = new StringBuilder(); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       result.append(line); 
      } 

      Log.d("JSON Parser", "result: " + result.toString()); 

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

     conn.disconnect(); 

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

     // return JSON Object 
     return Obj; 
    } 
} 

任何帮助,将不胜感激。注意:我对此还是比较新的,所以请尽可能简化,非常感谢。

编辑: 好吧,我使用的JSON API是http://api.fixer.io/latest?base=SGD我使用www.jsonlint.com到以下JSON转换成JSON格式:

{ 
    "base": "SGD", 
    "date": "2016-02-29", 
    "rates": { 
     "AUD": 0.99576, 
     "BGN": 1.2762, 
     "BRL": 2.8316, 
     "CAD": 0.96359, 
     "CHF": 0.71217, 
     "CNY": 4.6559, 
     "CZK": 17.655, 
     "DKK": 4.868, 
     "GBP": 0.51276, 
     "HKD": 5.5237, 
     "HRK": 4.9764, 
     "HUF": 203.11, 
     "IDR": 9500.4, 
     "ILS": 2.7769, 
     "INR": 48.537, 
     "JPY": 80.352, 
     "KRW": 879.31, 
     "MXN": 12.92, 
     "MYR": 2.9931, 
     "NOK": 6.2018, 
     "NZD": 1.0804, 
     "PHP": 33.68, 
     "PLN": 2.8413, 
     "RON": 2.9205, 
     "RUB": 53.927, 
     "SEK": 6.0828, 
     "THB": 25.336, 
     "TRY": 2.1059, 
     "USD": 0.71047, 
     "ZAR": 11.391, 
     "EUR": 0.65253 
    } 
} 
+0

请发表你们从服务器 – GiapLee

+0

像错误信息获取JSON数据表示,JSON字符串开头'{'这意味着它的JSON对象不是一个数组,你需要解析它作为一个对象不是数组,费率是json对象不是数组 – Bhargav

+0

用json数据更新。 – OnaniMaster

回答

0

有你没有的JSON JSON数组串。所以你必须得到另一个JSON对象。

JSONObject ratesObject = jObj.getJSONIObject("rates"); 

然后你就可以轻松搞定值如下...

Double aud = ratesObject.getDouble("AUD"); 
Double bgn = ratesObject.getDouble("BGN"); 
+0

对不起,这些都是在哪里完成的? – OnaniMaster

+0

//尝试将字符串解析为JSON对象 try {JSONObject jObj = new JSONObject(result.toString()); Obj = jObj.getJSONArray(“rates”); (“JSON解析器”,“错误解析数据”+ e.toString()); } 在这个try块 – Khan

+0

嗯,这样做,我得到这个错误后: 4月3日至1日:37:22.960 19287-19335/com.example.justin.currencyconverter20 E/JSON解析器:错误的数据进行解析org.json .JSONException:没有值运行 – OnaniMaster

1

如果利率是一个数组,那么代码波纹管:

JSONArray Objs = jObj.getJSONArray("rates"); 

但在你的字符串是一个JSON对象“率”:

{ 
    "AUD": 0.99576, 
    "BGN": 1.2762, 
    "BRL": 2.8316, 
    "CAD": 0.96359, 
    "CHF": 0.71217, 
    "CNY": 4.6559, 
    "CZK": 17.655, 
    "DKK": 4.868, 
    "GBP": 0.51276, 
    "HKD": 5.5237, 
    "HRK": 4.9764, 
    "HUF": 203.11, 
    "IDR": 9500.4, 
    "ILS": 2.7769, 
    "INR": 48.537, 
    "JPY": 80.352, 
    "KRW": 879.31, 
    "MXN": 12.92, 
    "MYR": 2.9931, 
    "NOK": 6.2018, 
    "NZD": 1.0804, 
    "PHP": 33.68, 
    "PLN": 2.8413, 
    "RON": 2.9205, 
    "RUB": 53.927, 
    "SEK": 6.0828, 
    "THB": 25.336, 
    "TRY": 2.1059, 
    "USD": 0.71047, 
    "ZAR": 11.391, 
    "EUR": 0.65253 
} 

so use code bel低:

JSONObe Obj = jObj.getJSONObject("rates"); 

,您可以通过访问obj的任何领域:

Double php = Obj.getDouble("PHP"); 

或得到字符串类型:

String php = Obj.getString("PHP"); 
0

试试这个。

public JSONObject makeHttpRequest(String url, String method) { 
try { 
      JSONObject jObj = new JSONObject(result.toString()); 
      JSONObject jObj2 = jObj.getJSONObject("rates"); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 
return jObj2; 
} 
0

首先,当试图解析JSON格式的数据,你应该能够区分一个JSONObjectsJsonArrays。这有许多工具,但我建议:

http://jsonviewer.stack.hu/

其次,你可以使用库,例如​​Gson到JSON格式的数据转换成Java POJO类和对象。对于这一点,你可以使用下面的工具,这将产生你需要创建GSON使用等效POJO类:

http://pojo.sodhanalibrary.com/

最后,你应该在你的代码如下修改删除错误:

JSONObject ratesObject = jObj.getJSONIObject("rates"); 
String aud = ratesObject.getString("AUD");