একটি JSON অ্যারে পার্স করতে GSON ব্যবহার করে


110

আমার কাছে এই জাতীয় একটি JSON ফাইল রয়েছে:

[
    {
        "number": "3",
        "title": "hello_world",
    }, {
        "number": "2",
        "title": "hello_world",
    }
]

ফাইলগুলির একটি মূল উপাদান থাকার আগে আমি ব্যবহার করতাম:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);

কোড কিন্তু আমি ভাবতে পারি না যে Wrapperক্লাসটি কোড করতে কিভাবে মূল উপাদানটি একটি অ্যারে হয়।

আমি ব্যবহার করে চেষ্টা করেছি:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);

সঙ্গে:

public class Wrapper{

    String number;
    String title;

}

কিন্তু কোন ভাগ্য হয়নি। এই পদ্ধতিটি ব্যবহার করে আমি আর কীভাবে এটি পড়তে পারি?

পিএস আমি এটি ব্যবহার করে কাজ করতে পেরেছি:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");

তবে আমি এটি উভয় পদ্ধতিতে কীভাবে (সম্ভব হলে) কীভাবে করতে হয় তা জানতে পছন্দ করব।


4
আপনি কি নিশ্চিত যে শিরোনাম উপাদানগুলির পরে কমা রয়েছে? এগুলি সরিয়ে Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);ফেললে আমার পক্ষে ভাল কাজ করে।
Pshemo

1
এটাই সমস্যা হবে .. এত সহজ ভুল!
এডুয়ার্ডো

উত্তর:


112

অ্যারেতে রাখা JSON অবজেক্টের শেষে (আপনার ক্ষেত্রে প্রতিটি ক্ষেত্রে ) কমা দ্বারা সমস্যা দেখা দেয় :

{
    "number": "...",
    "title": ".." ,  //<- see that comma?
}

এগুলি সরিয়ে ফেললে আপনার ডেটা হয়ে যাবে

[
    {
        "number": "3",
        "title": "hello_world"
    }, {
        "number": "2",
        "title": "hello_world"
    }
]

এবং

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);

ভাল কাজ করা উচিত।



1
@ স্নেক বিটিডাব্লু, jacksonলাইব্রেরির ক্ষেত্রে এবং এই মন্তব্যটি অ্যারে তৈরি করে এবং এটিকে মোড়ানো Arrays.asList(..)টাইপরেফেন্স ব্যবহার করে একটি তালিকা তৈরির চেয়ে দ্রুত। আমি এটি gsonলাইব্রেরি দিয়ে পরীক্ষা করিনি তবে এটির বেঞ্চমার্ক করার জন্য এটি মূল্যবান হতে পারে।
Pshemo

39
Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);

class Wrapper{
    int number;
    String title;       
}

ঠিকঠাক কাজ মনে হচ্ছে। তবে ,আপনার স্ট্রিংয়ে একটি অতিরিক্ত কমা রয়েছে।

[
    { 
        "number" : "3",
        "title" : "hello_world"
    },
    { 
        "number" : "2",
        "title" : "hello_world"
    }
]

16
public static <T> List<T> toList(String json, Class<T> clazz) {
    if (null == json) {
        return null;
    }
    Gson gson = new Gson();
    return gson.fromJson(json, new TypeToken<T>(){}.getType());
}

নমুনা কল:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class);

4
আমার জন্য, এটি আমার বস্তুগুলিকে নির্দিষ্টকরণের সামগ্রীর তালিকার পরিবর্তে লিংকডট্রিম্যাপের তালিকায় পরিণত করছে (উদাহরণস্বরূপ)।
রায়ান নিউজম

আপনি জিসন ইউটিলেস ক্লাস কোথায় পেলেন?
রসু আলিন

GsonUtilsক্লাসটি যেখানে সে তার নিজস্ব toList()পদ্ধতি রাখে।
ব্যবহারকারী 1438038

এটি কাজ করতে পারে না: টাইপটোকেনকে অবশ্যই একটি ভুল মান তৈরি করতে হবে যেহেতু এটি সংকলিত হওয়ার সময় টি জানা যায়নি। এটি সম্ভবত তালিকার জন্য টোকেন টাইপ তৈরি করবে <অবজেক্ট>। টাইপটি তৈরি করার সময় আপনাকে আসল ক্লাসটি ব্যবহার করতে হবে।
হ্যান্স-পিটার স্টার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.