gpt4 book ai didi

java - Android中解析JSON的问题

转载 作者:行者123 更新时间:2023-12-02 08:14:13 27 4
gpt4 key购买 nike

friend 们大家好,我在解析 JSON Web 服务数据时遇到问题

我从我的网络服务中获得了以下数据集

[{"store_id":"81","store_name":"Mayo - Castlebar McDrive","store_type":"Drive-Thru",
"vouchers_available":"Vouchers available","store_limit":"10","distance":"8123.33 km",
"latitude":"53.8501090162671","longitude":"-9.29713726043701","image_name":"http:\/\/www.mcfinder.ie\/admin\/images\/stores\/default.png",
"voucher_count":"2","is_open":"Restaurant Open","attributes":[{"attribute_name":"Wi-Fiiiii",
"image_name":"http:\/\/www.mcfinder.ie\/admin\/images\/attributes\/t_wifi_icon.gif"},{"attribute_name":"Cashless",
"image_name":"http:\/\/www.mcfinder.ie\/admin\/images\/attributes\/t_cashless_icon.gif"},
{"attribute_name":"McDrive","image_name":"http:\/\/www.mcfinder.ie\/admin\/images\/attributes\/car_icon.png"}]}]

我正在使用此代码来解析数据,但我收到错误

请 friend 们,我是 JSON Web 服务新手,指导我我做错了什么。

代码:

JSONObject jObject = new JSONObject(data);
JSONArray array = jObject.getJSONArray("attributes");

错误:

07-19 23:43:02.437: WARN/System.err(674): org.json.JSONException: A JSONObject text must begin with '{' at character 2 of 

M正在等待一些积极的回应和指导

谢谢

最佳答案

如果您要使用 JSON 数据,我建议您查看 http://json.org 中的 JSON 介绍。 ,直到彻底理解为止。幸运的是,JSON 是一种相对简单的数据格式,很快就能适应它。

针对原问题中的具体问题,请注意,JSON数据的最外层结构是一个数组。因此,它需要作为数组读取——而不是作为对象。

这是完整 JSON 结构的简要描述。

具有一个未命名对象元素的数组。该未命名对象有 12 个元素,其中 11 个是字符串,其中一个名为“attributes”的元素是由三个对象组成的数组。 “attributes”数组中的每个对象都有两个字符串元素。

因此,如果您想要“attributes”数组,请首先将整个内容作为数组读取,然后将数组的第一个组件作为对象获取,然后从该对象中将“attributes”元素作为数组获取。以下是执行此操作的示例。

import java.math.BigDecimal;
import java.net.URI;
import java.util.List;

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

public class Foo
{
public static void main(String[] args) throws Exception
{
JSONArray outerArray = new JSONArray("[{\"store_id\":\"81\",\"store_name\":\"Mayo - Castlebar McDrive\",\"store_type\":\"Drive-Thru\",\"vouchers_available\":\"Vouchers available\",\"store_limit\":\"10\",\"distance\":\"8123.33 km\",\"latitude\":\"53.8501090162671\",\"longitude\":\"-9.29713726043701\",\"image_name\":\"http:\\/\\/www.mcfinder.ie\\/admin\\/images\\/stores\\/default.png\",\"voucher_count\":\"2\",\"is_open\":\"Restaurant Open\",\"attributes\":[{\"attribute_name\":\"Wi-Fiiiii\",\"image_name\":\"http:\\/\\/www.mcfinder.ie\\/admin\\/images\\/attributes\\/t_wifi_icon.gif\"},{\"attribute_name\":\"Cashless\",\"image_name\":\"http:\\/\\/www.mcfinder.ie\\/admin\\/images\\/attributes\\/t_cashless_icon.gif\"},{\"attribute_name\":\"McDrive\",\"image_name\":\"http:\\/\\/www.mcfinder.ie\\/admin\\/images\\/attributes\\/car_icon.png\"}]}]");
JSONObject object = outerArray.getJSONObject(0);
JSONArray attributes = object.getJSONArray("attributes");
for (int i = 0, length = attributes.length(); i < length; i++)
{
JSONObject attribute = attributes.getJSONObject(i);
System.out.printf("attribute name=%s, image=%s\n", attribute.getString("attribute_name"), attribute.getString("image_name"));
}
}
}

如果您不打算使用 Android 提供的内置 JSON API,我强烈建议您切换到 Jackson ,这使得使用 Java 读写任意复杂的 JSON 变得非常容易。以下是使用它的示例。

import java.io.File;
import java.math.BigDecimal;
import java.net.URI;
import java.util.List;

import org.codehaus.jackson.map.ObjectMapper;

public class Foo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper();
Store[] stores = mapper.readValue(new File("input.json"), Store[].class);
Store store = stores[0];
List<Attribute> attributes = store.attributes;
for (Attribute attribute : attributes)
{
System.out.printf("attribute name=%s, image=%s\n", attribute.attribute_name, attribute.image_name);
}
// output:
// attribute name=Wi-Fiiiii, image=http://www.mcfinder.ie/admin/images/attributes/t_wifi_icon.gif
// attribute name=Cashless, image=http://www.mcfinder.ie/admin/images/attributes/t_cashless_icon.gif
// attribute name=McDrive, image=http://www.mcfinder.ie/admin/images/attributes/car_icon.png
}
}

class Store
{
public String store_id;
public String store_name;
public String store_type;
public String vouchers_available;
public String store_limit;
public String distance;
public BigDecimal latitude;
public BigDecimal longitude;
public URI image_name;
public int voucher_count;
public String is_open;
public List<Attribute> attributes;
}

class Attribute
{
public String attribute_name;
public URI image_name;
}

关于java - Android中解析JSON的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6751681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com