当前位置: 首页 > 知识库问答 >
问题:

Android应用程序解析json数据

丁茂
2023-03-14

您好,我有这个代码,我想将此数据解析为对象,现在我得到了一个 anyType 的字符串

我想分别得到描述对象纬度对象和经度对象

@SuppressLint("NewApi") 
public class MainActivity extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/xxxx/xxxx";
private static final String METHOD_NAME = "xxxxxx";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.0.2.2:52564/xxxx.svc/soap";    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy); 

    TextView textView = new TextView(this);

    setContentView(textView);

    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransport = new HttpTransportSE(URL);

    try
    {
        httpTransport.call(SOAP_ACTION, envelope);  
        Object result = (Object)envelope.getResponse();
        textView.setText(result.toString());
    }
    catch (Exception exception)
    {
        textView.setText(exception.toString());
    }
}
}

共有3个答案

松俊美
2023-03-14

就像你的json数据一样

[
    {
        "Description": "1",
        "Latitude": 0.369,
        "Longitude": 1.258
    },
    {
        "Description": "2",
        "Latitude": 1.369,
        "Longitude": 3.258
    },
    {
        "Description": "3",
        "Latitude": 2.369,
        "Longitude": 2.258
    }
]

如下所示为数据创建一个类

public class Detail {
    String description;
    Double lat;
    Double longi;

    public Detail(String description, Double lat, Double longi) {
        this.description=description;
        this.lat=lat;
        this.longi=longi;
    }
}

之后,它为Deatail创建一个数组列表,如下所示

List<Detail> detailList=new ArrayList<Detail>();

并执行以下操作

String jsondata = loadJSONFromAsset();//load data and assign as json string
        JSONArray primaryArray;
        try {
            primaryArray = new JSONArray(jsondata);

            for (int i = 0; i < primaryArray.length(); i++) {

                JSONObject jObject = primaryArray.getJSONObject(i);
                String description = (String) jObject.getString("Description");
                Log.d("Description", description);
                Double latitude =  jObject.getDouble("Latitude");
                Log.d("Latitude", latitude+"");
                Double longitude = jObject.getDouble("Longitude");
                Log.d("Longitude", longitude+"");

                detailList.add(new Detail(description, latitude, longitude));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

现在,您可以从arraylist中获取所有详细数据

丁承德
2023-03-14

您可以只使用json对象来处理响应。

以下是代码摘要:

JSONObject obj = new JSONObject(envelope.getResponse().toString());
String Latitude = obj.getString("Latitude");
String Longitude = obj.getString("Longitude");

如果您的json看起来像这样:

{
  Latitude: "1.00",
  Longitude: "1.00"
}

根据你的评论,你的json看起来像这样:

[
  {
    "Description": "1",
    "Latitude": 0.369,
    "Longitude": 1.258
  },
  {
    "Description": "2",
    "Lati‌​tude": 1.369,
    "Longitude": 3.258
  },
  {
    "Description": "3",
    "Latitude": 2.369,
    "Longitude": 2.258
  }
]

您可以像这样提取值:

JSONArray obj = new JSONArray(envelope.getResponse().toString());
String[][] values = new String[obj.length()][3];
for(int i = 0; i < obj.length(); i++)
{
    values[i][0] = obj.getJSONObject(i).getString("Description");
    values[i][1] = obj.getJSONObject(i).getString("Latitude");
    values[i][2] = obj.getJSONObject(i).getString("Longitude");
}

这里可能有错误,我刚刚在这里写了一下。< br >但这是您需要理解的概念。

席安康
2023-03-14

将json解析为对象的最简单方法是使用对象映射器

    ObjectMapper om = new ObjectMapper();
    YourClass object = om.readValue(jsonText, YourClass.class); 

这个对象映射器来自jackson:

http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/ObjectMapper.html

 类似资料:
  • 问题内容: 我需要在Java Android Appl中解析json字符串的帮助。 JSON文件的文本: 如何获取值:location_id,名称,纬度,经度。谢谢,米哈尔。 问题答案: 使用手动解析,您可以这样实现: 在您的案例中,请注意您的外部元素数据是JSONObject类型,然后您有了一个JSONArray 我的json文件: 请注意,我的从[开始,这意味着一个数组,但您的是从{开始,然后

  • 问题内容: 现在完成XML SAX解析之后,我将在应用程序中进行JSON解析。我在这里为您提供杰森 现在,我提到了一个Json解析的示例,在该示例中,他们创建了一个jString对象,我对此特定行有疑问,如下所示: 任何人都可以让我澄清一下。完整示例的链接如下: http://www.androidcompetencycenter.com/2009/10/json-parsing-in- andr

  • 问题内容: 在我的Android应用程序中,我必须使用服务器上的JSON才能在应用程序中进行特定调整。我试图达到的目的是读取此json并将所有值存储到局部变量中以在应用程序内执行操作。 来自服务器的JSON: 为了进行解析,我创建了Parse JSON类,并尝试提出在我的应用中读取和存储此JSON值的方法。 执行此操作的功能: getJSONFromUrl方法: 我正在收到错误:在此但我已经定义了

  • 我有这个JS代码: 我的JSON看起来像:{“日期”:“2017-03-27”,“顺序”:“61”,“数据”:[{“国家标签”:“澳大利亚”,“货币标签”:“多拉尔”,“单位”:“1”,“代码”:“澳元”,“汇率”:“18.946”},{“国家标签”:“巴西”,“货币标签”:“真实”,“单位”:“1”,“代码”:“BRL”,“汇率”:“7.951”},{“国家标签”Bulharsko,“货币标签”

  • 我正在使用一个JSON解析器从我的JSON文件中读取数据并将其显示在我的应用程序中,我最初使用这段代码创建数组,它工作良好,但现在我已经将它粘贴到一个新的应用程序中,使它从JSON获取数据并将其放到一个不工作的文本字段中。我会在下面贴出代码和错误日志。 d/test:http://curtisboylan.me/mygeek/mygeekprofile.php?user=1 e/egl_emula

  • 主要内容:本节引言:,1.Json概念以及与XML的比较,2.Android给我们提供的Json解析类,3.代码示例:解析Json字符串:,本节小结:本节引言: 相信大家肯定对 Json 不陌生吧,我们和服务器交互一般用得较多的数据传递方式都是 Json 字符串的形式, 保存对象,我们也可以写成一个 Json 字符串然后存储!解析 Json 不知道你用的是 Gson,Fastjson,jackson 等,不过本节我们并不会去用这些第三方的解析库,而是使用 Android 自带的 Json 解析器