首页 > 解决方案 > 预期为 BEGIN_ARRAY,但在第 16 行第 14 列路径 $[0].menus 处为 BEGIN_OBJECT

问题描述

我正在尝试解析 json 文件,但标题中不断出现异常。

这是json文件

[
  {
 
    "delivery_charge": 5,
    "image": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/Bear%2Bcreek.jpg?alt=media&token=3d207b7a-1eda-49bc-931a-5abf78ee5093",
    "hours": {
      "Sunday": "11-7",
      "Monday": "10-9",
      "Tuesday": "10-10",
      "Wednesday": "10-11",
      "Thursday": "10-10",
      "Friday": "10-11",
      "Saturday": "10-2"
    },
    "menus":{
     "Drinks": [
       {
        "Fresh_Fruit_Blends": ["Strawberry", "Strawberry Banana","Banana Smoothie","Mango","Papaya","Honeydew","Pineapple", "Avacado",
        "Cantaloupe","Strawberry Lime","Fruit Tea","Mangonada"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/freshfruit.png?alt=media&token=13915c20-0d40-4542-a74e-20c791b085c2"
      },
       {
        "Natural_Juices": ["Orange Juice", "Watermelon", "Carrot", "Carrot Orange","Fresh Limeade","Nuoc Mat(Artichoke Tea"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/nmat100%25naturaljuice.png?alt=media&token=f264240d-1764-480e-8155-b4948b28c36f"
      },
       {
        "Sea_Foam": ["Matcha", "Earl Grey", "Jasmine", "Oolong","Thai Tea","Thai Green", "Black Coffee"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/seafoam.png?alt=media&token=d0175366-3310-4569-bbde-5aa30abcf533"
      },
      {
        "Cream_Tea": ["Matcha", "Cream Tea","Jasmine", "Thai Tea","Thai Green Tea", "Oolong Cream","Brown Sugar Milk","Taro Cream","Almond Cream", "Caramel Cream", "Chocolate Cream", "Coconut Cream",
        "Honeydew", "Hazelnut", "Oreo Cream Tea", "Peppermint Cream Tea", "Vanilla Cream"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/bsmCreamtea.png?alt=media&token=da1ab8df-4e49-4c02-9080-e1dbb7d5c310"
      },
      {
        "Flavored_Tea": ["Jasmine Green Tea", "Passion Fruit", "Strawberry", "Mango","Peppermint", "Lime","Honey","Dried Plum",
        "Green Apple","Peach","Lychee","Winter Melon","Pomegranate"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/sbgtea.png?alt=media&token=b74b21cc-8f77-47f1-aeb9-f3ecf744de54"
      },
      {
        "Smoothie": ["Oreo Cookies & Cream","Taro","Coconut","Pina Colada","Blueberry w/ Ice-Cream","Almond","Red Bean",
        "Chocolate","Frozen Matcha Green Tea","Orange Dreamsicle","Vanilla"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/tarosmoothie.png?alt=media&token=7fb66ea0-560a-4196-a152-dd09b1229a8c"
      },
      {
        "Slurpy": ["Kiwi","Blueberry","Cherry","Grape","Green Apple", "Lychee","Passion Fruit","Peach"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/mangoslurpy.png?alt=media&token=07191718-3737-47e1-b2dd-26775fb61fc1"
      },
       {"Coffee": ["Ice-Cream","Frozen Vanilla Cappuccino","Frozen Mocha","Coffee Cream Tea","Cafe Sua Da","Caramel","Hazelnut","Vanilla","Peppermint","Hot Cocoa"],
        "price": 10.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/FVFCOFFEE.png?alt=media&token=3c6f2b6b-3536-490a-838b-1fe027398d54"
      }
     ],
    "Foods" : [
      {
        "name": "Popcorn Chicken",
        "price": 5.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/PopcornCkn.png?alt=media&token=a4112144-2e52-4237-b4a7-781bf0c676dc"
      },
       {
        "name": "Sweet Potato Fries",
        "price": 5.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/SweetPotato.png?alt=media&token=38e45dfc-e886-4f85-aa3e-d36bc051f6e1"
      },
      {
        "name": "Egg Rolls",
        "price": 5.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/Eggrolls.png?alt=media&token=221167d6-13b1-48e0-8527-12ee686ba452"
      },
      {
        "name": "Calamari",
        "price": 5.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/Calamari.png?alt=media&token=004a3bbb-48e9-4392-88ae-2760310ebb00"
      },
       {
        "name": "Fried Squid Balls",
        "price": 5.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/Squid.png?alt=media&token=634a516f-2d7e-4983-8afb-4c0073ae04e1"
      },
       {
        "name": "Crinkle Cut Fries",
        "price": 5.00,
        "url": "https://firebasestorage.googleapis.com/v0/b/kims-tea-house.appspot.com/o/CrinkleFries.png?alt=media&token=b2a20607-1cfd-405d-96e9-ec92a0512576"
      }
    ]
  }
  },

这是使用 json 并抛出错误消息的代码

public class MainActivity extends AppCompatActivity implements RestaurantListAdapter.RestaurantListClickListener {

    Button logout;

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

        logout = findViewById(R.id.Logout);


        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SignInActivity.class);
                startActivity(intent);
                finish();
            }
        });

        ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle("Restaurant List");

        List<RestaurantModel> restaurantModelList =  getRestaurantData();

        initRecyclerView(restaurantModelList);
    }

    private void initRecyclerView(List<RestaurantModel> restaurantModelList ) {
        RecyclerView recyclerView =  findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        RestaurantListAdapter adapter = new RestaurantListAdapter(restaurantModelList, this);
        recyclerView.setAdapter(adapter);
    }

    public List<RestaurantModel> getRestaurantData() {
        InputStream is = getResources().openRawResource(R.raw.kth_db);
        Writer writer = new StringWriter();
        char[] buffer = new char[1024];
        try{
            Reader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
            int n;
            while(( n = reader.read(buffer)) != -1) {
                writer.write(buffer, 0,n);
            }
        }catch (Exception e) {

        }

        String jsonStr = writer.toString();
        Gson gson = new Gson();
        RestaurantModel[] restaurantModels =  gson.fromJson(jsonStr, RestaurantModel[].class);
        List<RestaurantModel> restList = Arrays.asList(restaurantModels);
        return  restList;
    }




    @Override
    public void onItemClick(RestaurantModel restaurantModel) {
        Intent intent = new Intent(MainActivity.this, RestaurantMenuActivity.class);
        intent.putExtra("RestaurantModel", restaurantModel);
        startActivity(intent);

    }





每当我编辑 gson 代码时,它都会从“预期的 begin_object 但是 begin_array”到预期的 begin_array 但是 begin_object”来回切换

餐厅模特班

import android.os.Parcel;
import android.os.Parcelable;

import java.util.List;

public class RestaurantModel implements Parcelable {

    private String name;
    private String address;
    private String image;
    private float delivery_charge;
    private Hours hours;
    private List<Menu> menus;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public float getDelivery_charge() {
        return delivery_charge;
    }

    public void setDelivery_charge(float delivery_charge) {
        this.delivery_charge = delivery_charge;
    }

    public Hours getHours() {
        return hours;
    }

    public void setHours(Hours hours) {
        this.hours = hours;
    }

    public List<Menu> getMenus() {
        return menus;
    }

    public void setMenus(List<Menu> menus) {
        this.menus = menus;
    }

    protected RestaurantModel(Parcel in) {
        name = in.readString();
        address = in.readString();
        image = in.readString();
        delivery_charge = in.readFloat();
        menus = in.createTypedArrayList(Menu.CREATOR);
    }

    public static final Creator<RestaurantModel> CREATOR = new Creator<RestaurantModel>() {
        @Override
        public RestaurantModel createFromParcel(Parcel in) {
            return new RestaurantModel(in);
        }

        @Override
        public RestaurantModel[] newArray(int size) {
            return new RestaurantModel[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(address);
        dest.writeString(image);
        dest.writeFloat(delivery_charge);
        dest.writeTypedList(menus);
    }
}

标签: javajsonandroid-studiogson

解决方案


推荐阅读