gpt4 book ai didi

java - 在java数据模式中映射嵌套json

转载 作者:行者123 更新时间:2023-12-02 03:05:02 28 4
gpt4 key购买 nike

My API is has nested json am trying to map it out it in json so i can display it in fragments this is my json response from the server. my main problem is mapping out the json objects to my data modal... kindly assist where possible

<小时/>
[
{
"couponDate": "2019-07-14T11:34:09.482Z",
"couponComment": "GooD LucK :)",
"couponNumber": 1,
"_id": "5d2b134149db640017f8fda4",
"overUnder": [
{
"betDate": "2019-07-14T11:34:09.472Z",
"competition": {
"country": "jh",
"league": "jhj"
},
"homeTeam": "jh",
"awayTeam": "hj",
"gameStarted": false,
"gameFinished": false,
"homeHalfTimeScore": -1,
"awayHalfTimeScore": -1,
"homeScore": -1,
"awayScore": -1,
"tip": "Over0.5",
"risk": 0,
"tipResult": "pending",
"betCategory": "overUnder",
"tipper": "reptile",
"_id": "5d2b143749db640017f8fda6"
},
{
"betDate": "2019-07-14T13:24:19.804Z",
"competition": {
"country": "kenya",
"league": "add"
},
"homeTeam": "da",
"awayTeam": "ada",
"gameStarted": false,
"gameFinished": false,
"homeHalfTimeScore": -1,
"awayHalfTimeScore": -1,
"homeScore": -1,
"awayScore": -1,
"tip": "1X",
"risk": 0,
"tipResult": "pending",
"betCategory": "overUnder",
"tipper": "reptile",
"_id": "5d2b30043b2bc800172f5f3f"
}
],
"threeWay": [
{
"betDate": "2019-07-14T13:24:19.804Z",
"competition": {
"country": "kenya",
"league": "add"
},
"homeTeam": "da",
"awayTeam": "ada",
"gameStarted": false,
"gameFinished": false,
"homeHalfTimeScore": -1,
"awayHalfTimeScore": -1,
"homeScore": -1,
"awayScore": -1,
"tip": "1X",
"risk": 0,
"tipResult": "pending",
"betCategory": "threeWay",
"tipper": "reptile",
"_id": "5d2b30083b2bc800172f5f40"
}
],
"doubleChance": [
{
"betDate": "2019-07-14T13:24:19.804Z",
"competition": {
"country": "kenya",
"league": "add"
},
"homeTeam": "da",
"awayTeam": "ada",
"gameStarted": false,
"gameFinished": false,
"homeHalfTimeScore": -1,
"awayHalfTimeScore": -1,
"homeScore": -1,
"awayScore": -1,
"tip": "1X",
"risk": 0,
"tipResult": "pending",
"betCategory": "doubleChance",
"tipper": "reptile",
"_id": "5d2b30003b2bc800172f5f3e"
}
],
"goalGoal": [
{
"betDate": "2019-07-14T13:24:19.804Z",
"competition": {
"country": "kenya",
"league": "add"
},
"homeTeam": "da",
"awayTeam": "ada",
"gameStarted": false,
"gameFinished": false,
"homeHalfTimeScore": -1,
"awayHalfTimeScore": -1,
"homeScore": -1,
"awayScore": -1,
"tip": "1X",
"risk": 0,
"tipResult": "pending",
"betCategory": "goalGoal",
"tipper": "reptile",
"_id": "5d2b300c3b2bc800172f5f41"
}
],
"halfTime": [
{
"betDate": "2019-07-14T13:24:19.804Z",
"competition": {
"country": "kenya",
"league": "add"
},
"homeTeam": "da",
"awayTeam": "ada",
"gameStarted": false,
"gameFinished": false,
"homeHalfTimeScore": -1,
"awayHalfTimeScore": -1,
"homeScore": -1,
"awayScore": -1,
"tip": "1X",
"risk": 0,
"tipResult": "pending",
"betCategory": "halfTime",
"tipper": "reptile",
"_id": "5d2b30113b2bc800172f5f42"
}
],
"bookingPts": [

],
"__v": 0
}
]

这是我的 Java 数据模式:

public class gamesmodal {

String couponComment;

overs overUnder;
String threeWay;
String doubleChance;
String goalGoal;
String halfTime;
String bookingPts;

public String getTitle() {
return couponComment;
}

public void setTitle(String couponComment) {
this.couponComment = couponComment;
}
public class overs extends gamesmodal {
String homeTeam;
String awayTeam;
String tip;

public String getHomeTeam() {
return homeTeam;
}

public void setHomeTeam(String homeTeam) {
this.homeTeam = homeTeam;
}

public String getAwayTeam() {
return awayTeam;
}

public void setAwayTeam(String awayTeam) {
this.awayTeam = awayTeam;
}

public String getTip() {
return tip;
}

public void setTip(String tip) {
this.tip = tip;
}
}



public void setOverUnder(overs overUnder) {
this.overUnder = overUnder;
}


}

我的logcat代码如下:

2019-07-14 16:25:28.396 23946-23946/dvlp.lamseybets E/AndroidRuntime: FATAL EXCEPTION: main Process: dvlp.lamseybets, PID: 23946 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 137 path $[0].overUnder at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) at com.google.gson.Gson.fromJson(Gson.java:887) at com.google.gson.Gson.fromJson(Gson.java:852) at com.google.gson.Gson.fromJson(Gson.java:801) at dvlp.lamseybets.matchResult$1.onResponse(matchResult.java:90) at dvlp.lamseybets.matchResult$1.onResponse(matchResult.java:82) at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106) at android.os.Handler.handleCallback(Handler.java:836) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:203) at android.app.ActivityThread.main(ActivityThread.java:6251) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 137 path $[0].overUnder at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)  at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)  at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)  at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)  at com.google.gson.Gson.fromJson(Gson.java:887)  at com.google.gson.Gson.fromJson(Gson.java:852)  at com.google.gson.Gson.fromJson(Gson.java:801)  at dvlp.lamseybets.matchResult$1.onResponse(matchResult.java:90)  at dvlp.lamseybets.matchResult$1.onResponse(matchResult.java:82)  at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83)  at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)  at android.os.Handler.handleCallback(Handler.java:836)  at android.os.Handler.dispatchMessage(Handler.java:103)  at android.os.Looper.loop(Looper.java:203)  at android.app.ActivityThread.main(ActivityThread.java:6251)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)  2019-07-14 16:25:29.993 23946-23957/dvlp.lamseybets I/art: Enter while loop.

因此将数据模式更改为:

import java.util.List;

public class datamodal {

private List<overUnder> overUnder = null;
String couponComment;
private List<threeWay> threeWay = null;
private List<DoubleChance> doubleChance = null;
private List<HalfTime> halfTime = null;
private List<GoalGoal> goalGoal = null;


public String getCouponComment() {
return couponComment;
}

public void setCouponComment(String couponComment) {
this.couponComment = couponComment;
}

public List<overUnder> getOverUnder() {
return overUnder;
}

public void setOverUnder(List<overUnder> overUnder) {

this.overUnder = overUnder;
}

public List<DoubleChance> getDoubleChance() {
return doubleChance;
}

public void setDoubleChance(List<DoubleChance> doubleChance) {
this.doubleChance = doubleChance;
}

public List<HalfTime> getHalfTime() {
return halfTime;
}

public void setHalfTime(List<HalfTime> halfTime) {
this.halfTime = halfTime;
}

public List<GoalGoal> getGoalGoal() {
return goalGoal;
}

public void setGoalGoal(List<GoalGoal> goalGoal) {
this.goalGoal = goalGoal;
}

public List<threeWay> getThreeWay() {
return threeWay;
}

public void setThreeWay(List<threeWay> threeWay) {
this.threeWay = threeWay;
}

}

我需要在此处显示 json 响应

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;

import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.VolleyError;
import com.android.volley.Response;
import com.android.volley.toolbox.JsonArrayRequest;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.json.JSONArray;

import java.util.ArrayList;
import java.util.List;

public class matchResult extends Fragment {
private static final String TAG = matchResult.class.getSimpleName();
private static final String URL = "my url is here";

private RecyclerView recyclerView;
private List<datamodel> movieList;
private StoreAdapter mAdapter;

public matchResult() {
// Required empty public constructor
}

public List<datamodel> datamodel() {
return datamodel();
}

public static matchResult newInstance(String param1, String param2) {
matchResult fragment = new matchResult();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.activity_match_result, container, false);

recyclerView = view.findViewById(R.id.recycler_view);
movieList = new ArrayList<>();
mAdapter = new StoreAdapter(getActivity(), movieList);



recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
recyclerView.setNestedScrollingEnabled(false);

fetchStoreItems();

return view;
}

private void fetchStoreItems() {
JsonArrayRequest request = new JsonArrayRequest(URL,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
if (response == null) {
Toast.makeText(getActivity(), "Couldn't fetch the store items! Pleas try again.", Toast.LENGTH_LONG).show();
return;
}

List<datamodel> items = new Gson().fromJson(response.toString(), new TypeToken<List<datamodel>>() {
}.getType());

movieList.clear();
movieList.addAll(items);

// refreshing recycler view
mAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error in getting json
Log.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getActivity(), "Error: " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
});

MyApplication.getInstance().addToRequestQueue(request);
}


class StoreAdapter extends RecyclerView.Adapter<StoreAdapter.MyViewHolder> {
private Context context;
private List<datamodel> movieList;

public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView name, price;
public ImageView thumbnail;

public MyViewHolder(View view) {
super(view);
name = view.findViewById(R.id.title);
price = view.findViewById(R.id.price);
thumbnail = view.findViewById(R.id.thumbnail);
}
}

public StoreAdapter(Context context, List<datamodel> movieList) {
this.context = context;
this.movieList = movieList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);

return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
final datamodel movie = movieList.get(position);

holder.name.setText((CharSequence) movie.getHomeTeam());
holder.price.setText((CharSequence) movie.getAwayTeam());
}

@Override
public int getItemCount() {
return movieList.size();
}
}
}

最佳答案

正如 logcat 错误明确指出预期为 BEGIN_OBJECT,但在第 1 行第 137 列路径 $[0].overUnder 处为 BEGIN_ARRAY

所以试试这个

在游戏模式中

private List<OverUnder> overUnder = null;

public List<OverUnder> getOverUnder() {
return overUnder;
}

public void setOverUnder(List<OverUnder> overUnder) {
this.overUnder = overUnder;
}

上下级

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class OverUnder {

@SerializedName("betDate")
@Expose
private String betDate;
@SerializedName("competition")
@Expose
private Competition competition;
@SerializedName("homeTeam")
@Expose
private String homeTeam;
@SerializedName("awayTeam")
@Expose
private String awayTeam;
@SerializedName("gameStarted")
@Expose
private Boolean gameStarted;
@SerializedName("gameFinished")
@Expose
private Boolean gameFinished;
@SerializedName("homeHalfTimeScore")
@Expose
private Integer homeHalfTimeScore;
@SerializedName("awayHalfTimeScore")
@Expose
private Integer awayHalfTimeScore;
@SerializedName("homeScore")
@Expose
private Integer homeScore;
@SerializedName("awayScore")
@Expose
private Integer awayScore;
@SerializedName("tip")
@Expose
private String tip;
@SerializedName("risk")
@Expose
private Integer risk;
@SerializedName("tipResult")
@Expose
private String tipResult;
@SerializedName("betCategory")
@Expose
private String betCategory;
@SerializedName("tipper")
@Expose
private String tipper;
@SerializedName("_id")
@Expose
private String id;

public String getBetDate() {
return betDate;
}

public void setBetDate(String betDate) {
this.betDate = betDate;
}

public Competition getCompetition() {
return competition;
}

public void setCompetition(Competition competition) {
this.competition = competition;
}

public String getHomeTeam() {
return homeTeam;
}

public void setHomeTeam(String homeTeam) {
this.homeTeam = homeTeam;
}

public String getAwayTeam() {
return awayTeam;
}

public void setAwayTeam(String awayTeam) {
this.awayTeam = awayTeam;
}

public Boolean getGameStarted() {
return gameStarted;
}

public void setGameStarted(Boolean gameStarted) {
this.gameStarted = gameStarted;
}

public Boolean getGameFinished() {
return gameFinished;
}

public void setGameFinished(Boolean gameFinished) {
this.gameFinished = gameFinished;
}

public Integer getHomeHalfTimeScore() {
return homeHalfTimeScore;
}

public void setHomeHalfTimeScore(Integer homeHalfTimeScore) {
this.homeHalfTimeScore = homeHalfTimeScore;
}

public Integer getAwayHalfTimeScore() {
return awayHalfTimeScore;
}

public void setAwayHalfTimeScore(Integer awayHalfTimeScore) {
this.awayHalfTimeScore = awayHalfTimeScore;
}

public Integer getHomeScore() {
return homeScore;
}

public void setHomeScore(Integer homeScore) {
this.homeScore = homeScore;
}

public Integer getAwayScore() {
return awayScore;
}

public void setAwayScore(Integer awayScore) {
this.awayScore = awayScore;
}

public String getTip() {
return tip;
}

public void setTip(String tip) {
this.tip = tip;
}

public Integer getRisk() {
return risk;
}

public void setRisk(Integer risk) {
this.risk = risk;
}

public String getTipResult() {
return tipResult;
}

public void setTipResult(String tipResult) {
this.tipResult = tipResult;
}

public String getBetCategory() {
return betCategory;
}

public void setBetCategory(String betCategory) {
this.betCategory = betCategory;
}

public String getTipper() {
return tipper;
}

public void setTipper(String tipper) {
this.tipper = tipper;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

}

提示:如果我们手动解析 JSON,则过程很麻烦且容易出错。您可以使用jsonschema2pojo 在几秒钟内为您解析 JSON。

谢谢。

关于java - 在java数据模式中映射嵌套json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57027981/

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