在 Android 中将 XML 转换为 JSON 会出错

Posted

技术标签:

【中文标题】在 Android 中将 XML 转换为 JSON 会出错【英文标题】:Converting XML to JSON in Android gives Error 【发布时间】:2021-07-20 01:06:38 【问题描述】:

我正在尝试从Earthquake API 获取数据。

我正在使用改造。数据采用XML 格式。我在 XML 中得到了很好的数据。我正在使用 XML-JSON 转换器库将其转换为 JSON。当我尝试使用简单的 xml 字符串(例如

)时,该库工作得很好

<title>Hello</title>.

该库确实将其转换为 JSON。

但是在转换从 api 获取的数据时,它给了我这个错误:

java.lang.NoSuchMethodError: No virtual method end()Z in class Lorg/json/XMLTokener

这个 xml 肯定有一些东西。请先检查 API 响应。

这些是我的文件: MainActivity.Java

public class MainActivity extends AppCompatActivity 

  private static final String TAG = "sagar";
  private ApiInterface apiInterface;

  @Override
  protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    apiInterface = ApiClient.getClient().create(ApiInterface.class);

    apiInterface.getTodos().enqueue(new Callback < ResponseBody > () 
      @Override
      public void onResponse(Call < ResponseBody > call, Response < ResponseBody > response) 
        try 
          String xmlStr = response.body().string();
          System.out.println("Response is => " + xmlStr.trim());
          JSONObject jsonObject = XML.toJSONObject(xmlStr);
          System.out.println("Response -> " + jsonObject);

         catch (JSONException | IOException e) 
          e.printStackTrace();
        
        //                System.out.println("Response -> " + response.body());
      

      @Override
      public void onFailure(Call < ResponseBody > call, Throwable t) 
        System.out.println("Failure -> " + t.getMessage());

      
    );
  

APIClient.java

public class ApiClient 

  private static final String BASE_URL = "https://earthquake.usgs.gov/";
  private static Retrofit retrofit = null;

  public static Retrofit getClient() 
    if (retrofit == null) 
      retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
    
    return retrofit;
  

ApiInterface.java

public interface ApiInterface 

  @GET("earthquakes/feed/v1.0/summary/significant_day.atom")
  Call < ResponseBody > getTodos();

【问题讨论】:

这听起来像是 JSON 库中的一个错误。如果您可以使用最新版本重现它,我建议您向他们的错误跟踪器提交一个最小示例。 【参考方案1】:

只需将网址中的.atom 替换为.geojson

https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_day.geojson

输出:


    "type": "FeatureCollection",
    "metadata": 
        "generated": 1619456055000,
        "url":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_day.geojson",
        "title": "USGS Significant Earthquakes, Past Day",
        "status": 200,
        "api": "1.10.3",
        "count": 1
    ,
    "features": [
        
            "type": "Feature",
            "properties": 
                "mag": 6.4,
                "place": "200 km WSW of Haveluloto, Tonga",
                "time": 1619389680681,
                "updated": 1619449698040,
                "tz": null,
                "url": "https://earthquake.usgs.gov/earthquakes/eventpage/us6000e4rl",
                "detail": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us6000e4rl.geojson",
                "felt": 1,
                "cdi": 2.7,
                "mmi": 3.689,
                "alert": "green",
                "status": "reviewed",
                "tsunami": 0,
                "sig": 630,
                "net": "us",
                "code": "6000e4rl",
                "ids": ",us6000e4rl,",
                "sources": ",us,",
                "types": ",dyfi,losspager,moment-tensor,origin,phase-data,shakemap,",
                "nst": null,
                "dmin": 6.009,
                "rms": 1.12,
                "gap": 21,
                "magType": "mww",
                "type": "earthquake",
                "title": "M 6.4 - 200 km WSW of Haveluloto, Tonga"
            ,
            "geometry": 
                "type": "Point",
                "coordinates": [-177.0771,-21.6472,234.29]
            ,
            "id": "us6000e4rl"
        
    ]

【讨论】:

以上是关于在 Android 中将 XML 转换为 JSON 会出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中将 JSON 转换为 XML?

在java中将带有命名空间的xml转换为json

在 PHP 中将 JSON 转换为 XML,但在 XML 中为 JSON 数组创建一个容器元素

在 C# 中将 JSON 数组转换为 XML

如何在 C# 中将 Xml 转换为 Json,反之亦然

在 Android 中将对象转换为 JSON