Разобрать Json как объект, получивший исключение begin_object, но был begin_array - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу получить доступ к объекту JSON, но он дает мне следующее исключение в процессе:

(begin_object, но было begin_array)

Это мой Json

{"RequestUserId": "7bb288a4-db12-45af-9e93-5fbb3943aa20", "Всего": 1, "Всего страниц": 1, "PreviousLink": "", "NextPageLink": "","Данные": [{"Id": 29, "Заголовок": "Энергетический фонд", "Описание": "Фонд плотины Диамербаша", "Завершение": "Сбор", "Статус": "Актив", "Сумма": 2000, «Начало»: ноль, «Конец»: ноль, «Дата создания»: «2018-10-28Т05: 34: 13.333», «Дата изменения»: «2018-10-28Т05: 34: 13.333», «Носитель»: [], "collection": {"Amount": 405, "Count": 4}, "contrib": 0, "group": {"Id": 162, "Title": "Logic Greyscale Logic"}, "Пользователь ": {" Id ":" c0985265-04b4-47e5-adc2-b82660912134 "," FirstName ":" Imran "," LastName ":" Khattak "," ProfilePicture ":" https://marcoapp.blob.core.windows.net/marco/5eb4e50b-b36c-491d-b292-3aa16a445e54.jpg", "CoverPicture": "https://marcoapp.blob.core.windows.net/marco/bcb1d889-135d-442c-b2c9-7b03dc3639c3.jpg"," Координата ": {" Широта ": 33.532824," Долгота ": 73.12971}," IsOnline ": false," LastSeen ":" 5 минут назад "}}]}

Вот мой блок CODE для анализа JSON:

if (! CommonFunctions.isNetworkAvailable ()) {
            Toast.makeText (getContext (), "Network Not Available", Toast.LENGTH_SHORT).show ();
            return;
        }
        JsonObjectRequest req = new JsonObjectRequest (Request.Method.GET, WebServicesConstants.GET_GROUP_POSTS + groupId + "/campaigns",
                null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response)
            {
                String sJson = response.toString();

                JsonParser parser = new JsonParser();
                JsonObject responseData = parser.parse(sJson).getAsJsonObject();

                Gson gSon = new Gson();
                CampaignResponse campaignResponse = new CampaignResponse ();
                try {
                    campaignResponse = gSon.fromJson(responseData, CampaignResponse.class);
                }catch (Exception e)
                {
                    Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                }


                if(campaignResponse.getCampaignDataResponses()!=null)
                {
                    for (int i=0; i<campaignResponse.campaignDataResponses.size(); i++)
                    {
                        CampaignDataResponse campaignDataResponse  = campaignResponse.campaignDataResponses.get (i);
                       // feedList.clear();
                        campaignDataResponses.add (campaignDataResponse);
                    }
                }

                if (campaignDataResponses.size () > 0) {

                    CampaingsAddapter adapter = new CampaingsAddapter(getContext(), campaignDataResponses);
                    CampaignListView.setAdapter(adapter);

                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error)
            {
            }
        })
        {
            @Override
            public Map<String,String> getHeaders()
            {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json; charset=utf-8");
                headers.put("Authorization","Bearer " + CommonFunctions.GetUserToken ());
                return headers;
            }
        };

        req.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        MarcoAppController.getInstance().getcRequestQueue().add(req);

Here is my CampaignResponse Class 

открытый класс CampaignResponse {

@SerializedName ("RequestUserId")
public String requestedUserId;

@SerializedName ("Total")
public String total;

@SerializedName ("TotalPages")
public String totalPages;

@SerializedName ("PreviousLink")
public String previousLink;

@SerializedName ("NextPageLink")
public String nextPageLink;


@SerializedName ("Data")
public ArrayList<CampaignDataResponse> campaignDataResponses;


public String getRequestedUserId () {
    return requestedUserId;
}

public void setRequestedUserId (String requestedUserId) {
    this.requestedUserId = requestedUserId;
}

public String getTotal () {
    return total;
}

public void setTotal (String total) {
    this.total = total;
}

public String getTotalPages () {
    return totalPages;
}

public void setTotalPages (String totalPages) {
    this.totalPages = totalPages;
}

public String getPreviousLink () {
    return previousLink;
}

public void setPreviousLink (String previousLink) {
    this.previousLink = previousLink;
}

public String getNextPageLink () {
    return nextPageLink;
}

public void setNextPageLink (String nextPageLink) {
    this.nextPageLink = nextPageLink;
}

public ArrayList<CampaignDataResponse> getCampaignDataResponses() {
    return campaignDataResponses;
}

public void setCampaignDataResponses(ArrayList<CampaignDataResponse> campaignDataResponses) {
    this.campaignDataResponses = campaignDataResponses;
}

}

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Используйте генератор DTO для создания Вашего класса MOdel, https://plugins.jetbrains.com/plugin/7834-dto-generator

Создайте класс модели,

package com.kintanpatel;

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

import java.util.List;

public class CampaignResponse {


    @Expose
    @SerializedName("Data")
    private List<Data> Data;
    @Expose
    @SerializedName("NextPageLink")
    private String NextPageLink;
    @Expose
    @SerializedName("PreviousLink")
    private String PreviousLink;
    @Expose
    @SerializedName("TotalPages")
    private int TotalPages;
    @Expose
    @SerializedName("Total")
    private int Total;
    @Expose
    @SerializedName("RequestUserId")
    private String RequestUserId;

    public List<Data> getData() {
        return Data;
    }

    public void setData(List<Data> Data) {
        this.Data = Data;
    }

    public String getNextPageLink() {
        return NextPageLink;
    }

    public void setNextPageLink(String NextPageLink) {
        this.NextPageLink = NextPageLink;
    }

    public String getPreviousLink() {
        return PreviousLink;
    }

    public void setPreviousLink(String PreviousLink) {
        this.PreviousLink = PreviousLink;
    }

    public int getTotalPages() {
        return TotalPages;
    }

    public void setTotalPages(int TotalPages) {
        this.TotalPages = TotalPages;
    }

    public int getTotal() {
        return Total;
    }

    public void setTotal(int Total) {
        this.Total = Total;
    }

    public String getRequestUserId() {
        return RequestUserId;
    }

    public void setRequestUserId(String RequestUserId) {
        this.RequestUserId = RequestUserId;
    }

    public static class Data {
        @Expose
        @SerializedName("User")
        private User User;
        @Expose
        @SerializedName("group")
        private Group group;
        @Expose
        @SerializedName("contribution")
        private int contribution;
        @Expose
        @SerializedName("collection")
        private Collection collection;
        @Expose
        @SerializedName("Media")
        private List<String> Media;
        @Expose
        @SerializedName("ModifiedDate")
        private String ModifiedDate;
        @Expose
        @SerializedName("CreatedDate")
        private String CreatedDate;
        @Expose
        @SerializedName("End")
        private String End;
        @Expose
        @SerializedName("Start")
        private String Start;
        @Expose
        @SerializedName("Amount")
        private int Amount;
        @Expose
        @SerializedName("Status")
        private String Status;
        @Expose
        @SerializedName("Terminate")
        private String Terminate;
        @Expose
        @SerializedName("Description")
        private String Description;
        @Expose
        @SerializedName("Title")
        private String Title;
        @Expose
        @SerializedName("Id")
        private int Id;

        public User getUser() {
            return User;
        }

        public void setUser(User User) {
            this.User = User;
        }

        public Group getGroup() {
            return group;
        }

        public void setGroup(Group group) {
            this.group = group;
        }

        public int getContribution() {
            return contribution;
        }

        public void setContribution(int contribution) {
            this.contribution = contribution;
        }

        public Collection getCollection() {
            return collection;
        }

        public void setCollection(Collection collection) {
            this.collection = collection;
        }

        public List<String> getMedia() {
            return Media;
        }

        public void setMedia(List<String> Media) {
            this.Media = Media;
        }

        public String getModifiedDate() {
            return ModifiedDate;
        }

        public void setModifiedDate(String ModifiedDate) {
            this.ModifiedDate = ModifiedDate;
        }

        public String getCreatedDate() {
            return CreatedDate;
        }

        public void setCreatedDate(String CreatedDate) {
            this.CreatedDate = CreatedDate;
        }

        public String getEnd() {
            return End;
        }

        public void setEnd(String End) {
            this.End = End;
        }

        public String getStart() {
            return Start;
        }

        public void setStart(String Start) {
            this.Start = Start;
        }

        public int getAmount() {
            return Amount;
        }

        public void setAmount(int Amount) {
            this.Amount = Amount;
        }

        public String getStatus() {
            return Status;
        }

        public void setStatus(String Status) {
            this.Status = Status;
        }

        public String getTerminate() {
            return Terminate;
        }

        public void setTerminate(String Terminate) {
            this.Terminate = Terminate;
        }

        public String getDescription() {
            return Description;
        }

        public void setDescription(String Description) {
            this.Description = Description;
        }

        public String getTitle() {
            return Title;
        }

        public void setTitle(String Title) {
            this.Title = Title;
        }

        public int getId() {
            return Id;
        }

        public void setId(int Id) {
            this.Id = Id;
        }
    }

    public static class User {
        @Expose
        @SerializedName("LastSeen")
        private String LastSeen;
        @Expose
        @SerializedName("IsOnline")
        private boolean IsOnline;
        @Expose
        @SerializedName("Coordinate")
        private Coordinate Coordinate;
        @Expose
        @SerializedName("CoverPicture")
        private String CoverPicture;
        @Expose
        @SerializedName("ProfilePicture")
        private String ProfilePicture;
        @Expose
        @SerializedName("LastName")
        private String LastName;
        @Expose
        @SerializedName("FirstName")
        private String FirstName;
        @Expose
        @SerializedName("Id")
        private String Id;

        public String getLastSeen() {
            return LastSeen;
        }

        public void setLastSeen(String LastSeen) {
            this.LastSeen = LastSeen;
        }

        public boolean getIsOnline() {
            return IsOnline;
        }

        public void setIsOnline(boolean IsOnline) {
            this.IsOnline = IsOnline;
        }

        public Coordinate getCoordinate() {
            return Coordinate;
        }

        public void setCoordinate(Coordinate Coordinate) {
            this.Coordinate = Coordinate;
        }

        public String getCoverPicture() {
            return CoverPicture;
        }

        public void setCoverPicture(String CoverPicture) {
            this.CoverPicture = CoverPicture;
        }

        public String getProfilePicture() {
            return ProfilePicture;
        }

        public void setProfilePicture(String ProfilePicture) {
            this.ProfilePicture = ProfilePicture;
        }

        public String getLastName() {
            return LastName;
        }

        public void setLastName(String LastName) {
            this.LastName = LastName;
        }

        public String getFirstName() {
            return FirstName;
        }

        public void setFirstName(String FirstName) {
            this.FirstName = FirstName;
        }

        public String getId() {
            return Id;
        }

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

    public static class Coordinate {
        @Expose
        @SerializedName("Longitude")
        private double Longitude;
        @Expose
        @SerializedName("Latitude")
        private double Latitude;

        public double getLongitude() {
            return Longitude;
        }

        public void setLongitude(double Longitude) {
            this.Longitude = Longitude;
        }

        public double getLatitude() {
            return Latitude;
        }

        public void setLatitude(double Latitude) {
            this.Latitude = Latitude;
        }
    }

    public static class Group {
        @Expose
        @SerializedName("Title")
        private String Title;
        @Expose
        @SerializedName("Id")
        private int Id;

        public String getTitle() {
            return Title;
        }

        public void setTitle(String Title) {
            this.Title = Title;
        }

        public int getId() {
            return Id;
        }

        public void setId(int Id) {
            this.Id = Id;
        }
    }

    public static class Collection {
        @Expose
        @SerializedName("Count")
        private int Count;
        @Expose
        @SerializedName("Amount")
        private int Amount;

        public int getCount() {
            return Count;
        }

        public void setCount(int Count) {
            this.Count = Count;
        }

        public int getAmount() {
            return Amount;
        }

        public void setAmount(int Amount) {
            this.Amount = Amount;
        }
    }
}

и ниже код, который может преобразовать ваш JSON в вашу модель,

 @Override
       public void onResponse(JSONObject response) {
          Log.e("", "work!");
     CampaignResponse item = new Gson().fromJson(response.toString(), CampaignResponse.class);
          Log.e("Test", item.getTotal() + "Done");

      }
0 голосов
/ 26 декабря 2018
try
{   
   String tp = response.getString("TotalPages");
   JSONArray data = response.getJSONArray("data");
   JSONObject somedata = response.getJSONArray("data").getJSONObject(0);
}
catch (JSONException e) 
{
   e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...