জাভাতে কীভাবে JSON পার্স করবেন


1048

আমি নিম্নলিখিত JSON পাঠ্য আছে। আমি কিভাবে এটা বিশ্লেষণ করতে পারেন, মান পেতে pageName, pagePic, post_id, ইত্যাদি?

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

7
JSON লাইব্রেরিতে জাভা নির্মিত, এটি করার সহজ উপায়, তবে আমার অভিজ্ঞতায় GSON কোনও JOON কে বেদাহীনভাবে পার্স করার জন্য সেরা গ্রন্থাগার।
ইমান আকবরী

16
এটিই প্রথম সর্বোচ্চ ভোট দেওয়া এবং সুরক্ষিত প্রশ্ন যার উত্তরগুলি আমি সবচেয়ে বিভ্রান্তিকর পেয়েছি
রিয়াফা আব্দুল হামেদ

6
@ জেসনমিনার্ড সম্মত হয়েছে। মোড হস্তক্ষেপ চেয়েছে। এটি সত্যিই বন্ধ করা উচিত। আমি প্রাথমিকভাবে ধরে নিয়েছিলাম (ভুলভাবে) প্রশ্নটি সুরক্ষিত থাকার সময় আমি এটি করতে পারিনি, সুতরাং আমি এটির অরক্ষিত করেছিলাম এবং আমার জিনিসটি করেছি। মোডের জন্য অপেক্ষা করার সময় কম জবাব দেওয়া এবং যেমন পছন্দ করা রোধ করতে এখনই এটি পুনরায় সুরক্ষিত করুন।
মেনা

4
"এই প্রশ্নটি কোনও গবেষণার প্রচেষ্টা দেখায় না" - ডাউনভোট বোতামের সরঞ্জামটিপ
জিন-ফ্রান্সোইস কর্পেট

উত্তর:


753

Org.json লাইব্রেরি ব্যবহার করা সহজ। নীচের উদাহরণ কোড:

import org.json.*;

String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......
}

আপনি আরও উদাহরণ পেতে পারেন: জাভাতে পার্সে জেএসওএন

ডাউনলোডযোগ্য জার: http://mvnrepository.com/artifact/org.json/json


15
আমি @ স্টেক্সম্যানের সাথে একমত আমি কেবল org.json চেষ্টা করেছি এবং এটি মারাত্মক জটিল c উদাহরণস্বরূপ এটি স্ট্যান্ডার্ড জাভা সংগ্রহের ধরণের সাথে সত্যই খেলছে না।
কেন উইলিয়ামস

7
@ স্টেক্সম্যান আমি org.jsonএমনকি সন্ধান ছাড়াই সাধারণ জেএসএন পার্সিংয়ের জন্য অন্যান্য লাইব্রেরিগুলির মধ্যে বেছে নেব । এটিই রেফারেন্স লাইব্রেরি যা ডগলাস ক্রকফোর্ড (জেএসএন আবিষ্কারক) তৈরি করেছে।
ওমর আল-ইতাওয়াই

31
পছন্দ করেছেন বিশ্রী এপিআই, অদক্ষ বাস্তবায়ন সহ এটি একটি প্রুফ অফ কনসেপ্ট। আমি মনে করি এটির লেখকদের দৃশ্যমানতার বাইরে গুণাগুণ কমিয়ে দেওয়ার পরিবর্তে তাদের নিজস্ব যোগ্যতার ভিত্তিতে গ্রন্থাগারগুলি বিবেচনা করা আরও ভাল - ডগ অনেকগুলি অর্জন করেছেন, তবে এটি নির্দিষ্ট লিবারের গুণাবলীকে সত্যই বদলায় না। 10 বছর আগে এটি শহরে একমাত্র খেলা ছিল, তবে তখন থেকে অনেক ইতিবাচক অগ্রগতি হয়েছে। এটি স্ট্রটস অফ জসন লিবের মতো।
স্ট্যাক্সমান

12
org.json সবচেয়ে খারাপ জেসন লাইব্রেরির মধ্যে রয়েছে। নির্বাচনের আগে উপলব্ধ জসন লাইব্রেরিগুলির বৈশিষ্ট্য সেট এবং কার্যকারিতাটি দেখতে পাওয়া উচিত। এখানে জেএমসন, জিএসএন, অরগ.জেসন, জেএমএইচ ব্যবহার করে জিনসন: github.com/fabienrenaud/java-json- বেঞ্চমার্কের সাথে আমি তুলনা করেছি এমন একটি মাপদণ্ড রয়েছে । জ্যাকসন এখানে স্পষ্ট বিজয়ী।
ফেবিয়ান

4
লাইসেন্সটিতে কোনও সাধারণ ব্যবহৃত ওপেন সোর্স লাইসেন্সিং অন্তর্ভুক্ত নয় এবং এতে কপিরাইটও রয়েছে।
খ্রিস্টান ভাইলমা

536

উদাহরণের খাতিরে ধরে নেওয়া যাক আপনার Personসাথে একটি মাত্র একটি ক্লাস রয়েছে name

private class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }
}

গুগল জিএসএন ( ম্যাভেন )

গ্রেট জেএসওএন সিরিয়ালাইজেশন / অবজেক্টের ডি-সিরিয়ালাইজেশন হিসাবে আমার ব্যক্তিগত প্রিয়।

Gson g = new Gson();

Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John

System.out.println(g.toJson(person)); // {"name":"John"}

হালনাগাদ

আপনি যদি একটি একক বৈশিষ্ট্য বের করতে চান তবে গুগল লাইব্রেরিতে এটি খুব সহজেই করতে পারেন:

JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();

System.out.println(jsonObject.get("name").getAsString()); //John

Org.JSON ( মাভেন )

যদি আপনার অবজেক্ট ডি-সিরিয়ালাইজেশনটির প্রয়োজন না হয় তবে কেবল কোনও বৈশিষ্ট্য পেতে, আপনি org.json চেষ্টা করতে পারেন ( বা উপরে GSON উদাহরণ দেখুন! )

JSONObject obj = new JSONObject("{\"name\": \"John\"}");

System.out.println(obj.getString("name")); //John

জ্যাকসন ( মাভেন )

ObjectMapper mapper = new ObjectMapper();
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);

System.out.println(user.name); //John

16
ভাল উত্তর. সামান্য উন্নতির জন্য একটি পরামর্শ: জিএসওএন এবং জ্যাকসন উভয়ই জেএসওএন গাছের প্রতিনিধিত্বের ব্যবহারকে সমর্থন করে (জ্যাকসনের জন্য এগুলি JsonNodeহ'ল, জিএসওনের অনুরূপ কিছু রয়েছে)। স্নিপেটগুলি দেখানো ভাল হতে পারে, কারণ এটি কেবলমাত্র org.json অফারের অনুরূপ।
স্টেক্সম্যান 18

উল্লেখযোগ্য দুটি আরও গ্রন্থাগার (সম্পূর্ণতার স্বার্থে): জসন -সিম্পল এবং ওরাকলের জেএসএনপি
জ্যাক স্টেম্যান 19

3
@ নিওন ওয়ার্জ, কেন? আমার কাছে মনে হচ্ছে এই উত্তরটি ইতিমধ্যে একটি জাভা শ্রেণীর সংজ্ঞা দেওয়া হয়েছে যা জেএসএন স্ট্রিংয়ের মতো ঠিক একই ক্ষেত্র রয়েছে, এর চেয়ে কম কিছুই নয় এবং আরও কিছু নয়। এটি বেশ দৃ strong় ধারণা।
আন্দ্রেয়া লাজারোত্তো

1
জসন-সিম্পল এবং ওরাকল এর জসনপ ভয়ঙ্করভাবে পারফর্ম করে: github.com/fabienrenaud/java-json-benchmark পারফরম্যান্সের জন্য, জ্যাকসন বা ডিএসএলজসন নির্বাচন করুন।
ফেবিয়ান

GSON রুট ব্যতীত অন্য স্তরে ক্ষেত্রগুলির গতিশীল ফিল্টারিং সমর্থন করে না!
গাংনাস

102
  1. যদি কেউ জেএসএন এবং এর বিপরীতে জাভা অবজেক্ট তৈরি করতে চায় তবে জিএসওএন বা জ্যাকসন তৃতীয় পক্ষের জারগুলি ব্যবহার করুন etc.

    //from object to JSON 
    Gson gson = new Gson();
    gson.toJson(yourObject);
    
    // from JSON to object 
    yourObject o = gson.fromJson(JSONString,yourObject.class);
  2. তবে যদি কেউ কেবল একটি JSON স্ট্রিংকে বিশ্লেষণ করতে এবং কিছু মান পেতে চায়, (বা তারের মাধ্যমে প্রেরণ করতে স্ক্র্যাচ থেকে একটি JSON স্ট্রিং তৈরি করতে পারে) কেবল জাভিইই জারটি ব্যবহার করুন যার মধ্যে জসনআরেডার, জসনআরে, জসনঅবজেক্ট ইত্যাদি রয়েছে আপনি এটির প্রয়োগটি ডাউনলোড করতে চাইতে পারেন javax.json এর মত অনুমান। এই দুটি জারের সাহায্যে আমি জেসনকে পার্স করতে এবং মানগুলি ব্যবহার করতে সক্ষম হয়েছি।

    এই API গুলি আসলে XML এর DOM / SAX পার্সিং মডেল অনুসরণ করে।

    Response response = request.get(); // REST call 
        JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
        JsonArray jsonArray = jsonReader.readArray();
        ListIterator l = jsonArray.listIterator();
        while ( l.hasNext() ) {
              JsonObject j = (JsonObject)l.next();
              JsonObject ciAttr = j.getJsonObject("ciAttributes");

4
@ এনডেস্ক্রিপ্ট যদি অনুমান করতেই হয় আমি বলি যে এটি হ্রাস পেয়েছে কারণ এটি মূল পোস্টারের প্রশ্নের উত্তর দেয় না: "প্রয়োজনীয় কোডটি কী?" যে উত্তরগুলি আপভোট করা হয়েছিল সেগুলি কোড স্নিপেট সরবরাহ করে।
jewbix.cube

4
দ্রষ্টব্য: জ্যাকসন এবং জিএসওএন উভয়ই ট্রি-স্টাইল এবং / অথবা মানচিত্র / তালিকা বন্ডিং সমর্থন করে, তাই জাভা ইই (জাভ্যাক্স.জসন) প্যাকেজটি ব্যবহার করার দরকার নেই। javax.json জ্যাকসন বা GSON এর বাইরে অফার কম।
স্টেক্সম্যান 2

আমি জাভা ই লাইব্রেরিতে একটি লিঙ্ক যুক্ত করার পরামর্শ দিচ্ছি।
বাসিল বাউরেক

72

কুইক-জসন পার্সার অত্যন্ত সোজা, নমনীয়, খুব দ্রুত এবং স্বনির্ধারিত। চেষ্টা করে দেখুন

বৈশিষ্ট্য:

  • JSON স্পেসিফিকেশন (RFC4627) এর সাথে অনুগত
  • উচ্চ-পারফরম্যান্স জেএসএন পার্সার
  • নমনীয় / কনফিগারযোগ্য পার্সিং পদ্ধতির সমর্থন করে
  • যে কোনও জেএসএন হায়ারার্কির কী / মান জোড়ার কনফিগারযোগ্য বৈধতা
  • ব্যবহার করা সহজ # খুব ছোট পায়ের ছাপ
  • বিকাশকারী বান্ধব এবং ব্যতিক্রমগুলি সনাক্ত করার পক্ষে সহজ করে তোলে
  • প্লাগেবল কাস্টম বৈধকরণ সমর্থন - কীগুলি এবং মানগুলি যখন মুখোমুখি হয়েছিল তখন কাস্টম ভ্যালিডিটারকে কনফিগার করে বৈধতা দেওয়া যেতে পারে
  • বৈধকরণ এবং অ-বৈধকরণ পার্সার সমর্থন
  • দ্রুত- JSON বৈধকরণের পার্সার ব্যবহারের জন্য দুটি ধরণের কনফিগারেশন (JSON / XML) এর জন্য সমর্থন
  • জেডিকে 1.5 প্রয়োজন
  • বাহ্যিক গ্রন্থাগারের উপর কোনও নির্ভরতা নেই
  • জেএসএন জেনারেশনের জন্য অবজেক্ট সিরিয়ালাইজেশনের মাধ্যমে সমর্থন
  • পার্সিং প্রক্রিয়া চলাকালীন সংগ্রহের ধরণের নির্বাচনের জন্য সমর্থন

এটি এর মতো ব্যবহার করা যেতে পারে:

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);

3
কোন জাভাডোক পাওয়া যায়?
jboi

24
পার্স করার সময় এই প্যাকেজটি খালি মানগুলি পরিচালনা করতে পারে না। উদাহরণস্বরূপ: ... "বিবরণ": "" ... একটি ব্যতিক্রম ছুঁড়েছে
ইভান

6
আমি এই সমস্যাটি (এবং আরও অনেকগুলি) কোড. google.com/p/quick-json/issues/detail?id=11স্থির করেছি আমি আশা করি লেখক আনুষ্ঠানিক প্রকাশে এটি ঠিক করার জন্য সময় দেবেন।
noamik

8
তালিকাভুক্ত বৈশিষ্ট্যগুলির মধ্যে অন্যান্য বিকল্পের তুলনায় কিছুই অনন্য নয় - এবং উচ্চ-পারফরম্যান্সের দাবিটি কোনও কিছুই দ্বারা সমর্থিত নয়; আরও পরিপক্ক লাইব্রেরি (গসন, জ্যাকসন, জেনসন, বুন) এর বিপরীতে যেগুলি github.com/eishay/jvm-serializer , github.com/novoj/ জাভাজেসন পারফরম্যান্স টেস্ট বা বিকাশকারী / ল্যাং / জেএসক্রিপ / এর মতো মানদণ্ডে অন্তর্ভুক্ত রয়েছে - I পরীক্ষাগুলিতে অন্তর্ভুক্ত এই লাইব্রেরিটি দেখেনি, বা এর ব্যাপকভাবে ব্যবহৃত হওয়ার উল্লেখ নেই।
স্টেক্সম্যান

26
এই প্রকল্পটি মারা গেছে বলে মনে হচ্ছে এবং কেন্দ্রীয় মেভেন সংগ্রহস্থলে আর হোস্ট করা হবে না।
8bitjunkie

40

আপনি গুগল জিসন ব্যবহার করতে পারেন ।

এই লাইব্রেরিটি ব্যবহার করে আপনাকে কেবল একই JSON কাঠামো সহ একটি মডেল তৈরি করতে হবে। তারপরে মডেলটি স্বয়ংক্রিয়ভাবে পূরণ হয়ে গেছে You আপনাকে আপনার ভেরিয়েবলগুলিকে আপনার জেএসএন কী বা কল হিসাবে কল করতে হবে@SerializedName আপনি বিভিন্ন নাম ব্যবহার করতে চান।

তাদেরকে JSON

আপনার উদাহরণ থেকে:

{
    "pageInfo": {
        "pageName": "abc",
        "pagePic": "http://example.com/content.jpg"
    }
    "posts": [
        {
            "post_id": "123456789012_123456789012",
            "actor_id": "1234567890",
            "picOfPersonWhoPosted": "http://example.com/photo.jpg",
            "nameOfPersonWhoPosted": "Jane Doe",
            "message": "Sounds cool. Can't wait to see it!",
            "likesCount": "2",
            "comments": [],
            "timeOfPost": "1234567890"
        }
    ]
}

মডেল

class MyModel {

    private PageInfo pageInfo;
    private ArrayList<Post> posts = new ArrayList<>();
}

class PageInfo {

    private String pageName;
    private String pagePic;
}

class Post {

    private String post_id;

    @SerializedName("actor_id") // <- example SerializedName
    private String actorId;

    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private String likesCount;
    private ArrayList<String> comments;
    private String timeOfPost;
}

পদান্বয়

এখন আপনি জিসন লাইব্রেরি ব্যবহার করে পার্স করতে পারেন:

MyModel model = gson.fromJson(jsonString, MyModel.class);

গ্রেডল আমদানি

গ্র্যাডল অ্যাপ্লিকেশনটিতে গ্রন্থাগারটি আমদানি করা মনে রাখবেন

implementation 'com.google.code.gson:gson:2.8.6' // or earlier versions

স্বয়ংক্রিয় মডেল উত্পাদন

আপনার মডেলকে তৈরি করতে পারেন তাদেরকে JSON স্বয়ংক্রিয়ভাবে মত অনলাইন টুলস ব্যবহার থেকে এই


38

প্রদত্ত প্রায় সমস্ত উত্তরের জন্য সুদের সম্পত্তির মানটি অ্যাক্সেস করার আগে একটি জাভা বস্তুতে JSON এর একটি সম্পূর্ণ deserialization প্রয়োজন। আর একটি বিকল্প, যা এই রুটে যায় না তা হ'ল জসনপ্যাট ব্যবহার করা যা মতো এবং জেএসওএন অবজেক্টগুলিকে অনুসরণ করার অনুমতি দেয়।

এটি একটি স্পেসিফিকেশন এবং জেওয়ের ভাল লোকেরা স্পেসিফিকেশনটির জন্য একটি জাভা বাস্তবায়ন তৈরি করেছে যা আপনি এখানে পেতে পারেন: https://github.com/jayway/JsonPath

সুতরাং মূলত এটি ব্যবহার করতে, এটি আপনার প্রকল্পে যুক্ত করুন, যেমন:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>${version}</version>
</dependency>

এবং ব্যবহার করতে:

String pageName = JsonPath.read(yourJsonString, "$.pageInfo.pageName");
String pagePic = JsonPath.read(yourJsonString, "$.pageInfo.pagePic");
String post_id = JsonPath.read(yourJsonString, "$.pagePosts[0].post_id");

ইত্যাদি ...

জেএসএন ট্রান্সভার করার অন্যান্য উপায় সম্পর্কে আরও তথ্যের জন্য জসনপথ স্পেসিফিকেশন পৃষ্ঠাটি দেখুন।


এটি একটি খুব ভাল পাঠাগার বিশেষত জেএসওএন পড়ার এবং আপডেট করার জন্য তবে এই গ্রন্থাগারটি সম্পর্কে কিছু জ্ঞাত সমস্যা থেকে সাবধান থাকুন। [1] দেখুন: github.com/json-path/JsonPath/issues/272 [2]: github.com/json-path/JsonPath/issues/375
পপিজি

38

উ - ব্যাখ্যা

আপনি জ্যাকসন লাইব্রেরিগুলি JOON স্ট্রিংকে POJO ( সমতল পুরাতন জাভা অবজেক্ট ) উদাহরণগুলিতে আবদ্ধ করার জন্য ব্যবহার করতে পারেন । POJO কেবলমাত্র একটি ব্যক্তিগত ক্লাস যা কেবলমাত্র ব্যক্তিগত ক্ষেত্র এবং পাবলিক গেটার / সেটার পদ্ধতিগুলি। জ্যাকসন পদ্ধতিগুলি প্রতিবিম্বিত করতে যাচ্ছেন ( প্রতিবিম্ব ব্যবহার করে) ), এবং শ্রেণীর ক্ষেত্রের নামগুলি JSON অবজেক্টের ক্ষেত্রের নামের সাথে খাপ খায় এমনভাবে JSON অবজেক্টটিকে POJO দৃষ্টিতে মানচিত্র করে চলেছে।

আপনার JSON অবজেক্টে, যা আসলে একটি যৌগিক বস্তু, মূল অবজেক্টে দুটি দুটি সাব-অবজেক্ট থাকে। সুতরাং, আমাদের POJO ক্লাসগুলির একই শ্রেণিবিন্যাস হওয়া উচিত। আমি পুরো JSON অবজেক্টকে পৃষ্ঠা অবজেক্ট হিসাবে কল করব । পেজ অবজেক্টে একটি পেজআইএনফো অবজেক্ট এবং একটি পোস্ট থাকে অবজেক্ট অ্যারে থাকে।

সুতরাং আমরা তিনটি পৃথক POJO ক্লাস তৈরি করতে হবে;

  • পৃষ্ঠা ক্লাস, একটি যৌগিক PageInfo শ্রেণী এবং অ্যারে পোস্ট দৃষ্টান্ত
  • পেজআইএনফো ক্লাস
  • পোস্ট ক্লাস

আমি কেবল প্যাকেজ ব্যবহার করেছি জ্যাকসন অবজেক্টম্যাপার, আমরা যা করি তা হ'ল ডেটা বাঁধাই;

com.fasterxml.jackson.databind.ObjectMapper

প্রয়োজনীয় নির্ভরতা, জার ফাইলগুলি নীচে তালিকাভুক্ত করা হয়েছে;

  • জ্যাকসন-কোর-2.5.1.jar
  • জ্যাকসন-databind-2.5.1.jar
  • জ্যাকসন-টীকা-2.5.0.jar

এখানে প্রয়োজনীয় কোডটি রয়েছে;

বি - মূল পোজো ক্লাস: পৃষ্ঠা

package com.levo.jsonex.model;

public class Page {

    private PageInfo pageInfo;
    private Post[] posts;

    public PageInfo getPageInfo() {
        return pageInfo;
    }

    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }

    public Post[] getPosts() {
        return posts;
    }

    public void setPosts(Post[] posts) {
        this.posts = posts;
    }

}

সি - শিশু পোজো ক্লাস: পেজআইএনফো

package com.levo.jsonex.model;

public class PageInfo {

    private String pageName;
    private String pagePic;

    public String getPageName() {
        return pageName;
    }

    public void setPageName(String pageName) {
        this.pageName = pageName;
    }

    public String getPagePic() {
        return pagePic;
    }

    public void setPagePic(String pagePic) {
        this.pagePic = pagePic;
    }

}

ডি - চাইল্ড পোজো ক্লাস: পোস্ট

package com.levo.jsonex.model;

public class Post {

    private String post_id;
    private String actor_id;
    private String picOfPersonWhoPosted;
    private String nameOfPersonWhoPosted;
    private String message;
    private int likesCount;
    private String[] comments;
    private int timeOfPost;

    public String getPost_id() {
        return post_id;
    }

    public void setPost_id(String post_id) {
        this.post_id = post_id;
    }

    public String getActor_id() {
        return actor_id;
    }

    public void setActor_id(String actor_id) {
        this.actor_id = actor_id;
    }

    public String getPicOfPersonWhoPosted() {
        return picOfPersonWhoPosted;
    }

    public void setPicOfPersonWhoPosted(String picOfPersonWhoPosted) {
        this.picOfPersonWhoPosted = picOfPersonWhoPosted;
    }

    public String getNameOfPersonWhoPosted() {
        return nameOfPersonWhoPosted;
    }

    public void setNameOfPersonWhoPosted(String nameOfPersonWhoPosted) {
        this.nameOfPersonWhoPosted = nameOfPersonWhoPosted;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getLikesCount() {
        return likesCount;
    }

    public void setLikesCount(int likesCount) {
        this.likesCount = likesCount;
    }

    public String[] getComments() {
        return comments;
    }

    public void setComments(String[] comments) {
        this.comments = comments;
    }

    public int getTimeOfPost() {
        return timeOfPost;
    }

    public void setTimeOfPost(int timeOfPost) {
        this.timeOfPost = timeOfPost;
    }

}

ই - নমুনা JSON ফাইল: নমুনা JSONFile.json

আমি এই ফাইলটিতে আপনার জেএসএন নমুনাটি অনুলিপি করেছি এবং এটি প্রকল্প ফোল্ডারের নীচে রেখেছি।

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

এফ - ডেমো কোড

package com.levo.jsonex;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.levo.jsonex.model.Page;
import com.levo.jsonex.model.PageInfo;
import com.levo.jsonex.model.Post;

public class JSONDemo {

    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            Page page = objectMapper.readValue(new File("sampleJSONFile.json"), Page.class);

            printParsedObject(page);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static void printParsedObject(Page page) {
        printPageInfo(page.getPageInfo());
        System.out.println();
        printPosts(page.getPosts());
    }

    private static void printPageInfo(PageInfo pageInfo) {
        System.out.println("Page Info;");
        System.out.println("**********");
        System.out.println("\tPage Name : " + pageInfo.getPageName());
        System.out.println("\tPage Pic  : " + pageInfo.getPagePic());
    }

    private static void printPosts(Post[] posts) {
        System.out.println("Page Posts;");
        System.out.println("**********");
        for(Post post : posts) {
            printPost(post);
        }
    }

    private static void printPost(Post post) {
        System.out.println("\tPost Id                   : " + post.getPost_id());
        System.out.println("\tActor Id                  : " + post.getActor_id());
        System.out.println("\tPic Of Person Who Posted  : " + post.getPicOfPersonWhoPosted());
        System.out.println("\tName Of Person Who Posted : " + post.getNameOfPersonWhoPosted());
        System.out.println("\tMessage                   : " + post.getMessage());
        System.out.println("\tLikes Count               : " + post.getLikesCount());
        System.out.println("\tComments                  : " + Arrays.toString(post.getComments()));
        System.out.println("\tTime Of Post              : " + post.getTimeOfPost());
    }

}

জি - ডেমো আউটপুট

Page Info;
****(*****
    Page Name : abc
    Page Pic  : http://example.com/content.jpg
Page Posts;
**********
    Post Id                   : 123456789012_123456789012
    Actor Id                  : 1234567890
    Pic Of Person Who Posted  : http://example.com/photo.jpg
    Name Of Person Who Posted : Jane Doe
    Message                   : Sounds cool. Can't wait to see it!
    Likes Count               : 2
    Comments                  : []
    Time Of Post              : 1234567890

26

নূন্যতম-জেসন ব্যবহার করুন যা খুব দ্রুত এবং সহজেই ব্যবহারযোগ্য। আপনি স্ট্রিং আপত্তি এবং স্ট্রিম থেকে পার্স করতে পারেন।

নমুনা তথ্য:

{
  "order": 4711,
  "items": [
    {
      "name": "NE555 Timer IC",
      "cat-id": "645723",
      "quantity": 10,
    },
    {
      "name": "LM358N OpAmp IC",
      "cat-id": "764525",
      "quantity": 2
    }
  ]
}

পার্সিং:

JsonObject object = Json.parse(input).asObject();
int orders = object.get("order").asInt();
JsonArray items = object.get("items").asArray();

জেএসএন তৈরি করা:

JsonObject user = Json.object().add("name", "Sakib").add("age", 23);

ম্যাভেন:

<dependency>
  <groupId>com.eclipsesource.minimal-json</groupId>
  <artifactId>minimal-json</artifactId>
  <version>0.9.4</version>
</dependency>

পোজো কেমন লাগবে?
জেসি

পজোর জন্য জিসন ব্যবহার করুন। এই গ্রন্থাগারটি সমর্থন করে না।
সাকিব সামি

22

আমি বিশ্বাস করি যে অফিশিয়াল জাভা জেএসএন এপিআইয়ের মধ্য দিয়ে যাওয়া সবচেয়ে ভাল অনুশীলন হওয়া উচিত যা এখনও চলছে।


7
যেহেতু আমি জবাব দিয়েছি, আমি জ্যাকসন ব্যবহার শুরু করেছি এবং আমি মনে করি এটি জেএসওন ডি-সিরিয়ালাইজেশনের জন্য সর্বোত্তম লাইব্রেরিগুলির মধ্যে একটি।
জিওভানি বোট্টা

2
প্যাডিংয়ের সাথে তারা JSON এর চেয়ে আলাদা কিছু বোঝার জন্য কেন আবার JSONP ব্যবহার করে ? ...
ক্রিস ওয়েসলিং

@ ক্রিসওয়েসেলিং আপনার অর্থ কী?
জিওভানি বোট্টা

"JSON প্রসেসিংয়ের জন্য জাভা API (JSON-P)" আপনার সাথে লিঙ্ক করা নথির শিরোনাম। এবং এটি আমাকে বিভ্রান্ত করেছিল, কারণ আমি জেএসওএনপিকে অন্য কিছু বোঝার জন্য জানতাম।
ক্রিস ওয়েসলিং

1
@ ক্রিস ওয়েলসেলিং ওহ এটি বিভ্রান্তিকর। তারা স্পেসিফিকেশনের জন্য এটি বেছে নিয়েছিল। তবে আমি যেমন বলেছিলাম, আমি সরাসরি জ্যাকসনের কাছে যাব।
জিওভানি বোটা

22

যেহেতু কেউই এখনও এটি উল্লেখ করেনি, তাই এখানে ন্যাশর্ন (জাভা 8 এর জাভাস্ক্রিপ্ট রানটাইম অংশ, তবে জাভা 11 এ অবমূল্যায়ন ) ব্যবহার করে একটি সমাধানের শুরু ।

সমাধান

private static final String EXTRACTOR_SCRIPT =
    "var fun = function(raw) { " +
    "var json = JSON.parse(raw); " +
    "return [json.pageInfo.pageName, json.pageInfo.pagePic, json.posts[0].post_id];};";

public void run() throws ScriptException, NoSuchMethodException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.eval(EXTRACTOR_SCRIPT);
    Invocable invocable = (Invocable) engine;
    JSObject result = (JSObject) invocable.invokeFunction("fun", JSON);
    result.values().forEach(e -> System.out.println(e));
}

পারফরম্যান্স তুলনা

আমি যথাক্রমে 20, 20 এবং 100 উপাদানগুলির তিনটি অ্যারে যুক্ত JSON সামগ্রী লিখেছি। আমি কেবল তৃতীয় অ্যারে থেকে 100 টি উপাদান পেতে চাই। আমি আমার জাভাস্ক্রিপ্ট ফাংশনটি পার্স করতে এবং আমার এন্ট্রিগুলি পেতে ব্যবহার করি।

var fun = function(raw) {JSON.parse(raw).entries};

ন্যাশর্ন ব্যবহার করে মিলিয়ন বার কল চালাতে 7.5 ~ 7.8 সেকেন্ড সময় লাগে

(JSObject) invocable.invokeFunction("fun", json);

org.json লাগে 20 ~ 21 সেকেন্ড

new JSONObject(JSON).getJSONArray("entries");

জ্যাকসন 6.5 ~ 7 সেকেন্ড সময় নেয়

mapper.readValue(JSON, Entries.class).getEntries();

এক্ষেত্রে জ্যাকসন ন্যাশর্নের চেয়ে ভাল পারফর্ম করেছেন, যা org.json এর চেয়ে অনেক বেশি ভাল পারফর্ম করে। Org.json বা জ্যাকসনের চেয়ে ন্যাশর্ন এপিআই ব্যবহার করা শক্ত। আপনার প্রয়োজনীয়তার উপর নির্ভর করে জ্যাকসন এবং ন্যাশর্ন উভয়ই কার্যকর সমাধান হতে পারে।


1
" "" ইউনিট কি ? ইঞ্চি না? এটা কি সেকেন্ড? মিনিট?
পিটার মর্টেনসেন

1
@ পিটারমোরটেনসেন এর অর্থ কয়েক সেকেন্ড। এটি অস্পষ্ট বলে মনে হচ্ছে আমি এটি পরিবর্তন করব। পর্যালোচনা করার জন্য ধন্যবাদ।
ফটোগ্রাফি

2
দুর্ভাগ্যক্রমে, ন্যাশর্ন জাভা ১১. JEP 335 এ অবমূল্যায়ন করা হয়েছে ।
প্রতি মাইল্ডনার

1
আমি জানি ন্যাশর্ন অবচিত, কিন্তু আমি এই উত্তরটি পছন্দ করেছি কারণ আমি কোনও নির্ভরতা চাইনি; যাইহোক, আমাকে উদাহরণটি কিছুটা পুনরায় কাজ করতে হয়েছিল:ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
কেজিবিএম

21

নীচের উদাহরণটি "jsonText" ভেরিয়েবল হিসাবে উপস্থাপন করা প্রশ্নে পাঠ্যটি কীভাবে পড়তে হবে তা দেখায়। এই সমাধানটি জাভা EE7 javax.json API ব্যবহার করে (যা অন্য কয়েকটি উত্তরে উল্লেখ করা হয়)। আমি এটিকে পৃথক উত্তর হিসাবে যুক্ত করার কারণটি হ'ল নীচের কোডটি কীভাবে বাস্তবে প্রশ্নের মধ্যে দেখানো কিছু মান অ্যাক্সেস করতে পারে তা দেখায় । এই কোডটি চালানোর জন্য জাভ্যাক্স.জেসন এপিআইয়ের একটি প্রয়োগ প্রয়োজন। প্রতিটি ক্লাসের জন্য প্রয়োজনীয় প্যাকেজটি অন্তর্ভুক্ত ছিল কারণ আমি "আমদানি" বিবৃতি ঘোষণা করতে চাইনি।

javax.json.JsonReader jr = 
    javax.json.Json.createReader(new StringReader(jsonText));
javax.json.JsonObject jo = jr.readObject();

//Read the page info.
javax.json.JsonObject pageInfo = jo.getJsonObject("pageInfo");
System.out.println(pageInfo.getString("pageName"));

//Read the posts.
javax.json.JsonArray posts = jo.getJsonArray("posts");
//Read the first post.
javax.json.JsonObject post = posts.getJsonObject(0);
//Read the post_id field.
String postId = post.getString("post_id");

এখন, যে কেউ এই উত্তরটি যায় এবং এই উত্তরটিকে নিম্নোক্ত করার আগে এটি GSON, org.json, জ্যাকসন, বা অন্য 3 য় পক্ষের ফ্রেমওয়ার্ক ব্যবহার করে না, সরবরাহিত পাঠ্যকে বিশ্লেষণ করার জন্য প্রশ্নটিতে "প্রয়োজনীয় কোড" এর উদাহরণ। আমি ভালভাবে অবগত যে বর্তমান মানক জেএসআর 353 মেনে চলা জেডিকে 9 এর জন্য বিবেচিত হচ্ছিল না এবং যেমন জেএসআর 353 স্পেসকে অন্য তৃতীয় পক্ষের জেএসওএন হ্যান্ডলিং বাস্তবায়ন হিসাবে একই আচরণ করা উচিত।


15

এটি আমার মনকে উজ্জীবিত করেছিল যে এটি কত সহজ ছিল। আপনি কেবলমাত্র Stringআপনার JSON কে একটি ডিফল্ট org.json প্যাকেজে কোনও JSONObject এর কনস্ট্রাক্টরের কাছে জমা দিতে পারেন pass

JSONArray rootOfPage =  new JSONArray(JSONString);

সম্পন্ন. ড্রপ মাইক্রোফোন । এটি JSONObjectsপাশাপাশি কাজ করে । এর পরে, আপনি কেবলমাত্র আপনার অবজেক্টগুলিতে পদ্ধতিগুলি Objectsব্যবহার করে আপনার শ্রেণিবিন্যাসের মাধ্যমে দেখতে পারেন get()


13
JSONArrayটাইপ এ J2SE JDK API- এর অংশ নয় এবং আপনি বলে না যা API বা তৃতীয় পক্ষের গ্রন্থাগার এই ধরনের প্রদান করে।
ববুলিয়াস

2
আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি না তবে আমি মনে করি এটি json.org/java থেকে "org.json" প্যাকেজটিকে বোঝায় । এটি ভাল জাভা লাইব্রেরিগুলি উপলভ্য হওয়ার আগে ব্যবহৃত হত, তবে এটি বেশ কয়েক বছর আগে (২০০৮ বা তার আগে)
স্টেক্সম্যান ২১:১১ এ

1
বা অ্যান্ড্রয়েডে ব্রেইনমুরফি 1 এর অর্থ JSONArray ?
আলেকজান্ডার ফারবার

12

জাভাতে অনেকগুলি জেএসএন লাইব্রেরি উপলব্ধ।

সর্বাধিক কুখ্যাত ব্যক্তিরা হলেন: জ্যাকসন, জিএসএন, জেনসন, ফাস্টজেসন এবং org.json।

যে কোনও লাইব্রেরি বেছে নেওয়ার জন্য সাধারণত তিনটি বিষয় লক্ষ্য করা উচিত:

  1. কর্মক্ষমতা
  2. ব্যবহারের সহজতা (কোডটি লেখার পক্ষে সহজ এবং স্পষ্টতই সহজ) - যা বৈশিষ্ট্যগুলির সাথে চলে।
  3. মোবাইল অ্যাপ্লিকেশনগুলির জন্য: নির্ভরতা / জারের আকার

বিশেষত জেএসওন লাইব্রেরিগুলির জন্য (এবং কোনও সিরিয়ালাইজেশন / ডিসরিয়ালাইজেশন লিবস), ডেটাবাইন্ডিং সাধারণত আগ্রহের কারণ এটি ডেটা প্যাক / আনপ্যাক করার জন্য বয়লার-প্লেট কোড লেখার প্রয়োজনীয়তা সরিয়ে দেয়।

1 এর জন্য, এই মানদণ্ডটি দেখুন : https://github.com/fabienrenaud/java-json-benmark আমি জেএমএইচ ব্যবহার করেছিলাম যা স্ট্রিম ব্যবহার করে সিরিয়ালাইজার এবং ডিসরিওলাইজারদের পারফরম্যান্স (জ্যাকসন, জিসন, ​​জেনসন, ফাস্টজসন, org.json, jsonp) তুলনা করে এবং ডেটাবাইন্ড এপিআই 2 এর জন্য, আপনি ইন্টারনেটে অসংখ্য উদাহরণ খুঁজে পেতে পারেন। উপরের মানদণ্ডটি উদাহরণের উত্স হিসাবেও ব্যবহার করা যেতে পারে ...

মানদণ্ডের দ্রুত পদক্ষেপ: জ্যাকসন অবলম্বন org.json এর চেয়ে 5 থেকে 6 গুণ ভাল এবং GSON এর চেয়ে দ্বিগুণেরও বেশি ভাল অভিনয় করেন।

আপনার নির্দিষ্ট উদাহরণের জন্য, নিম্নলিখিত কোডটি জ্যাকসনের সাথে আপনার জসনকে ডিকোড করে:

public class MyObj {

    private PageInfo pageInfo;
    private List<Post> posts;

    static final class PageInfo {
        private String pageName;
        private String pagePic;
    }

    static final class Post {
        private String post_id;
        @JsonProperty("actor_id");
        private String actorId;
        @JsonProperty("picOfPersonWhoPosted")
        private String pictureOfPoster;
        @JsonProperty("nameOfPersonWhoPosted")
        private String nameOfPoster;
        private String likesCount;
        private List<String> comments;
        private String timeOfPost;
    }

    private static final ObjectMapper JACKSON = new ObjectMapper();
    public static void main(String[] args) throws IOException {
        MyObj o = JACKSON.readValue(args[0], MyObj.class); // assumes args[0] contains your json payload provided in your question.
    }
}

যদি আপনার কোন প্রশ্ন থাকে তাহলে আমার জানতে দিন।


11

অন্যান্য উত্তরের পাশাপাশি, আমি জিএসএন, জ্যাকসন 1.x বা জ্যাকসন 2.x এর জন্য জসন বা জসন স্কিমা থেকে জাভা ক্লাস তৈরি করার জন্য এই অনলাইন ওপেনসোর্স পরিষেবা jsonschema2pojo.org পুনরায় সংশোধন করছি। উদাহরণস্বরূপ, যদি আপনার:

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    }
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": 1234567890,
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": 2,
              "comments": [],
              "timeOfPost": 1234567890
         }
    ]
}

Jsonschema2pojo.org GSON জন্য উত্পন্ন:

@Generated("org.jsonschema2pojo")
public class Container {
    @SerializedName("pageInfo")
    @Expose
    public PageInfo pageInfo;
    @SerializedName("posts")
    @Expose
    public List<Post> posts = new ArrayList<Post>();
}

@Generated("org.jsonschema2pojo")
public class PageInfo {
    @SerializedName("pageName")
    @Expose
    public String pageName;
    @SerializedName("pagePic")
    @Expose
    public String pagePic;
}

@Generated("org.jsonschema2pojo")
public class Post {
    @SerializedName("post_id")
    @Expose
    public String postId;
    @SerializedName("actor_id")
    @Expose
    public long actorId;
    @SerializedName("picOfPersonWhoPosted")
    @Expose
    public String picOfPersonWhoPosted;
    @SerializedName("nameOfPersonWhoPosted")
    @Expose
    public String nameOfPersonWhoPosted;
    @SerializedName("message")
    @Expose
    public String message;
    @SerializedName("likesCount")
    @Expose
    public long likesCount;
    @SerializedName("comments")
    @Expose
    public List<Object> comments = new ArrayList<Object>();
    @SerializedName("timeOfPost")
    @Expose
    public long timeOfPost;
}

9

আপনার যদি কিছু জাভা ক্লাস (বার্তা বলুন) জেএসএন স্ট্রিং (জসনস্ট্রিং) উপস্থাপন করে থাকেন তবে আপনি জ্যাকসন জেএসওএন লাইব্রেরিটি এর সাথে ব্যবহার করতে পারেন :

Message message= new ObjectMapper().readValue(jsonString, Message.class);

এবং বার্তা অবজেক্ট থেকে আপনি এর কোনও বৈশিষ্ট্য আনতে পারেন।


9

জিসন শিখতে এবং প্রয়োগ করা সহজ, আমাদের যা জানতে হবে তা দুটি পদ্ধতি অনুসরণ করে

  • toJson () - জাভা অবজেক্টকে JSON ফর্ম্যাটে রূপান্তর করুন

  • fromJson () - JSON কে জাভা বস্তুতে রূপান্তর করুন

`

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {

    Gson gson = new Gson();

    try {

        BufferedReader br = new BufferedReader(
            new FileReader("c:\\file.json"));

        //convert the json string back to object
        DataObject obj = gson.fromJson(br, DataObject.class);

        System.out.println(obj);

    } catch (IOException e) {
        e.printStackTrace();
    }

    }
}

`


জিসনে সম্পূর্ণ জ্ঞানের জন্য নীচে লিঙ্কগুলি দেখুন। github.com/google/gson/blob/master/UserGuide.md
ভেঙ্কট

9

অনেকগুলি ওপেন সোর্স লাইব্রেরি রয়েছে যা কোনও জিনিসে জেএসএন বিষয়বস্তু বিশ্লেষণ করতে বা কেবল জেএসএন মানগুলি পড়ার জন্য। আপনার প্রয়োজনীয়তা কেবলমাত্র মানগুলি পড়া এবং এটি কাস্টম অবজেক্টে পার্স করা। সুতরাং org.json গ্রন্থাগারটি আপনার ক্ষেত্রে যথেষ্ট।

Org.json লাইব্রেরিটিকে পার্স করতে এবং JsonObject তৈরি করতে ব্যবহার করুন:

JSONObject jsonObj = new JSONObject(<jsonStr>);

এখন, আপনার মানগুলি পেতে এই অবজেক্টটি ব্যবহার করুন:

String id = jsonObj.getString("pageInfo");

আপনি এখানে একটি সম্পূর্ণ উদাহরণ দেখতে পারেন:

জাভাতে কীভাবে JSON পার্স করবেন


দেখে মনে হচ্ছে আপনার সমস্ত উত্তরগুলিতে সেই সাইটের লিঙ্ক রয়েছে। যদি এটি স্প্যাম হয় তবে বন্ধ করুন। যদি তা না হয় তবে বিভ্রান্তির জন্য দুঃখিত, তবে আমি মনে করি না যে আপনার সমস্ত উত্তরে একটি লিঙ্ক পোস্ট করা প্রয়োজন।
ডোনাল্ড হাঁস

1
উত্তর দেওয়া শক্ত, যেখানে আপনি সমস্ত পরিস্থিতি ব্যাখ্যা করতে পারবেন। এই ক্ষেত্রে পছন্দ করুন, কীভাবে জসন অ্যারে বা একাধিক জসন অবজেক্টগুলি পড়তে হয়। এমনকি যদি আমি এটি করি তবে উত্তরটি খুব দীর্ঘ হবে এবং ব্যক্তি বিভ্রান্ত হতে পারে। সুতরাং আমি একটি লিঙ্ক দিচ্ছি যেখানে যথাযথ ব্যাখ্যা দেওয়া হয়েছে, যথাযথ উদাহরণ সহ। তিনি দেখার জন্য বেছে নিতে পারেন বা কেবলমাত্র আমার ব্যাখ্যাটি ব্যবহার করতে পারেন।
ললিতভাগতানি

1
এটি আমার কাছে উপস্থিত হয়েছে যে আপনি যে লিঙ্কটি সরবরাহ করেছেন তা কেবলমাত্র JSON কীভাবে পড়তে হয় তা প্রমাণ করে। আমি কীভাবে JSON- তে তথ্য পেতে পারি?
ল্যাম্প্রোস তাজানেটোস

দুঃখিত, তবে আমি আপনার প্রশ্নটি বুঝতে পারি নি: - "কীভাবে
জেএসএনও করতে হবে

7

দয়া করে এরকম কিছু করুন:

JSONParser jsonParser = new JSONParser();
JSONObject obj = (JSONObject) jsonParser.parse(contentString);
String product = (String) jsonObject.get("productId");

10
এর, এটি কোন লাইব্রেরি?
স্টুয়ার্ট

2
আমি মনে করি তিনি org.json.simple ব্যবহার করছেন
লাসিথা ইয়াপা

7

আপনি জেএসএন স্ট্রিংকে বিশ্লেষণ করতে জিসন লাইব্রেরিটি ব্যবহার করতে পারেন।

Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonAsString, JsonObject.class);

String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
String pagePic = jsonObject.getAsJsonObject("pageInfo").get("pagePic").getAsString();
String postId = jsonObject.getAsJsonArray("posts").get(0).getAsJsonObject().get("post_id").getAsString();

আপনি "পোস্টস" অ্যারের মাধ্যমে লুপ করতে পারেন:

JsonArray posts = jsonObject.getAsJsonArray("posts");
for (JsonElement post : posts) {
  String postId = post.getAsJsonObject().get("post_id").getAsString();
  //do something
}

5
{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": "1234567890",
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
              "comments": [],
              "timeOfPost": "1234567890"
         }
    ]
}

Java code :

JSONObject obj = new JSONObject(responsejsonobj);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......etc
}

9
দয়া করে আপনার উত্তরটি কোড-উত্তর হিসাবে ব্যাখ্যা করুন অন্যকে ভাল ডকুমেন্টেড কোডের চেয়ে অনেক কম সহায়তা করে। দেখুন "একজন মানুষ একটি মাছ দিতে এবং আপনি একটি দিনের জন্য তাহাকে ভোজন করাও; মাছ একজন মানুষ শেখান এবং আপনি একটি জীবনকাল জন্য তাকে ভোজন"
ওয়াই হা লি

এটি উল্লেখ করা ভাল হবে 'org.json' lib এর জন্য। যাইহোক, আমি মনে করি না এটি একেবারে খুব ভার্বোজ এবং এটি 'org.json' lib নিজেই অপ্রচলিত (ধীর, জটিল) being আরও ভাল পছন্দ রয়েছে: ব্যবহারের জন্য জিএসওএন, জ্যাকসন, বুন, জেনসন।
স্টেক্সম্যান 18

5

নীচের ব্লগ পোস্ট পড়ুন, জাভা জেএসওএন

এই পোস্টটি কিছুটা পুরাতন, তবুও আমি আপনাকে প্রশ্নের উত্তর দিতে চাই।

পদক্ষেপ 1: আপনার ডেটার একটি POJO ক্লাস তৈরি করুন।

পদক্ষেপ 2: এখন JSON ব্যবহার করে একটি বস্তু তৈরি করুন।

Employee employee = null;
ObjectMapper mapper = new ObjectMapper();
try{
    employee =  mapper.readValue(newFile("/home/sumit/employee.json"), Employee.class);
} 
catch (JsonGenerationException e){
    e.printStackTrace();
}

আরও রেফারেন্সের জন্য আপনি নীচের লিঙ্কটি উল্লেখ করতে পারেন ।


4

এই পৃষ্ঠার শীর্ষস্থানীয় উত্তরগুলি খুব সহজ উদাহরণগুলির ব্যবহার করে যেমন একটি সম্পত্তি (যেমন {নাম: মান}) object আমি মনে করি যে এখনও সহজ তবে বাস্তব জীবনের উদাহরণ কাউকে সাহায্য করতে পারে।

সুতরাং এটি গুগল অনুবাদ এপিআই দ্বারা ফিরে আসা জেএসএন:

{
  "data": 
     {
        "translations": 
          [
            {
              "translatedText": "Arbeit"
             }
          ]
     }
}

আমি গুগলের জিসন ব্যবহার করে "অনুবাদিত পাঠ্য" বৈশিষ্ট্য যেমন "আরবিট" এর মানটি পুনরুদ্ধার করতে চাই।

দুটি সম্ভাব্য পন্থা:

  1. একটি মাত্র প্রয়োজনীয় বৈশিষ্ট্য পুনরুদ্ধার করুন

    String json  = callToTranslateApi("work", "de");
    JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
    return jsonObject.get("data").getAsJsonObject()
            .get("translations").getAsJsonArray()
            .get(0).getAsJsonObject()
            .get("translatedText").getAsString();
  2. JSON থেকে জাভা অবজেক্ট তৈরি করুন

    class ApiResponse {
        Data data;      
        class Data {
            Translation[] translations;         
            class Translation {
                String translatedText;
            }
         }
     }

    ...

     Gson g = new Gson();
     String json =callToTranslateApi("work", "de");
     ApiResponse response = g.fromJson(json, ApiResponse.class);
     return response.data.translations[0].translatedText;

4

এটি করার জন্য আপনাকে প্রথমে একটি বাস্তবায়ন গ্রন্থাগার নির্বাচন করতে হবে।

তাদেরকে JSON প্রসেসিং জন্য জাভা এপিআই (JSR 353) বিশ্লেষণ করতে পোর্টেবল API গুলি প্রদান করে, জেনারেট করেন, রুপান্তর, এবং কোয়েরি JSON সামগ্রী মডেল ব্যবহার ও API গুলি স্ট্রিমিং।

রেফারেন্স বাস্তবায়ন এখানে: https://jsonp.java.net/

এখানে আপনি জেএসআর 353 বাস্তবায়নের একটি তালিকা পেতে পারেন :

JSR-353 (JSON) বাস্তবায়ন করে এমন API কী কী?

এবং আপনাকে সিদ্ধান্ত নিতে সহায়তা করার জন্য ... আমি এই নিবন্ধটিও পেয়েছি:

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

আপনি যদি জ্যাকসনের জন্য যান তবে জ্যাকসন ব্যবহার করে জাভায় / জাভা থেকে JSON এর মধ্যে রূপান্তর সম্পর্কে একটি ভাল নিবন্ধ: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- জ্যাকসন /

আশা করি এটা সাহায্য করবে!


আপনি জ্যাকসন লাইব্রেরির সংস্করণ 1-এ নির্দেশ করছেন। জ্যাকসন লাইব্রেরির বর্তমান সংস্করণটি দৃr়ভাবে ব্যবহার করার পরামর্শ দিন।
হারবার্ট ইউ

4

আপনি জয়ওয়ে জেসনপথ ব্যবহার করতে পারেন । নীচে সোর্স কোড, পম বিশদ এবং ভাল ডকুমেন্টেশনের সাথে একটি গিটহাব লিঙ্ক রয়েছে।

https://github.com/jayway/JsonPath

নীচের পদক্ষেপগুলি অনুসরণ করুন।

পদক্ষেপ 1 : মাভেন ব্যবহার করে আপনার শ্রেণীর পথে জেওয়ে জেএসএন পাথ নির্ভরতা যুক্ত করুন বা জেআর ফাইলটি ডাউনলোড করুন এবং ম্যানুয়ালি এটি যুক্ত করুন।

<dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.2.0</version>
</dependency>

পদক্ষেপ 2 : দয়া করে আপনার ইনপুট জেএসওএনকে এই উদাহরণ হিসাবে ফাইল হিসাবে সংরক্ষণ করুন। আমার ক্ষেত্রে আমি আপনার JSON কে নমুনা Json.txt হিসাবে সংরক্ষণ করেছি। নোট করুন আপনি পেজআইএনফো এবং পোস্টগুলির মধ্যে কমা মিস করেছেন।

পদক্ষেপ 3 : উপরের ফাইল থেকে জেএসএন সামগ্রীগুলি বাফারডিডার ব্যবহার করে পড়ুন এবং এটি স্ট্রিং হিসাবে সংরক্ষণ করুন।

BufferedReader br = new BufferedReader(new FileReader("D:\\sampleJson.txt"));

        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }
        br.close();
        String jsonInput = sb.toString();

পদক্ষেপ 4 : জাওয়ে জেএসএন পার্সার ব্যবহার করে আপনার জেএসএন স্ট্রিংটি পার্স করুন।

Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonInput);

পদক্ষেপ 5 : নীচের মত বিশদ পড়ুন।

String pageName = JsonPath.read(document, "$.pageInfo.pageName");
String pagePic = JsonPath.read(document, "$.pageInfo.pagePic");
String post_id = JsonPath.read(document, "$.posts[0].post_id");

System.out.println("$.pageInfo.pageName " + pageName);
System.out.println("$.pageInfo.pagePic " + pagePic);
System.out.println("$.posts[0].post_id " + post_id);

আউটপুটটি হবে :

$.pageInfo.pageName = abc
$.pageInfo.pagePic = http://example.com/content.jpg
$.posts[0].post_id  = 123456789012_123456789012

3

আমার কাছে জেএসএন রয়েছে:

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    }
}

জাভা ক্লাস

class PageInfo {

    private String pageName;
    private String pagePic;

    // Getters and setters
}

এই JSON কে একটি জাভা শ্রেণিতে রূপান্তর করার কোড।

    PageInfo pageInfo = JsonPath.parse(jsonString).read("$.pageInfo", PageInfo.class);

ম্যাভেন

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.2.0</version>
</dependency>

2

কেউ JSON ফাইলের কাঠামোর প্রতিনিধিত্ব করে জাভা মডেল ক্লাস তৈরি করতে এবং এটিকে JSON গাছের বিভিন্ন উপাদান অ্যাক্সেস করতে ব্যবহার করতে অ্যাপাচি @ মডেল টীকা ব্যবহার করতে পারেন । অন্যান্য সমাধানগুলির বিপরীতে এটি সম্পূর্ণ প্রতিফলন ছাড়াই কাজ করে এবং এটি পরিবেশের জন্য উপযুক্ত যেখানে প্রতিবিম্ব অসম্ভব বা উল্লেখযোগ্য ওভারহেড সহ আসে with

সেখানে ব্যবহারের একটি নমুনা মাভেন প্রকল্প রয়েছে । সবার আগে এটি কাঠামোর সংজ্ঞা দেয়:

@Model(className="RepositoryInfo", properties = {
    @Property(name = "id", type = int.class),
    @Property(name = "name", type = String.class),
    @Property(name = "owner", type = Owner.class),
    @Property(name = "private", type = boolean.class),
})
final class RepositoryCntrl {
    @Model(className = "Owner", properties = {
        @Property(name = "login", type = String.class)
    })
    static final class OwnerCntrl {
    }
}

এবং তারপরে সরবরাহকৃত ইনপুট স্ট্রিমটিকে বিশ্লেষণ করতে এবং তা করার সময় নির্দিষ্ট তথ্য বাছাই করতে উত্পন্ন RepositoryInfo এবং মালিক শ্রেণি ব্যবহার করে:

List<RepositoryInfo> repositories = new ArrayList<>();
try (InputStream is = initializeStream(args)) {
    Models.parse(CONTEXT, RepositoryInfo.class, is, repositories);
}

System.err.println("there is " + repositories.size() + " repositories");
repositories.stream().filter((repo) -> repo != null).forEach((repo) -> {
    System.err.println("repository " + repo.getName() + 
        " is owned by " + repo.getOwner().getLogin()
    );
})

হ্যাঁ, ওটাই! এটি ছাড়াও এখানে একটি লাইভ গিস্ট অ্যাসিক্রোনাস নেটওয়ার্ক যোগাযোগের সাথে একই রকম উদাহরণ দেখায়।


2

jsoniter(jsoniterator) হ'ল একটি তুলনামূলকভাবে নতুন এবং সাধারণ জসন লাইব্রেরি, যা সহজ এবং দ্রুত করার জন্য ডিজাইন করা হয়েছে। জেসন ডেটার ডিসরিয়ালাইজ করার জন্য আপনাকে যা করতে হবে তা হ'ল

JsonIterator.deserialize(jsonData, int[].class);

কোথায় jsonData জসন ডেটার একটি স্ট্রিং।

পরীক্ষা করে দেখুন অফিসিয়াল ওয়েবসাইট আরও তথ্যের জন্য।


1

আমরা JSON স্ট্রিংটিকে JSON অবজেক্টে রূপান্তর করতে এবং JSON অবজেক্টের উপর পুনরাবৃত্তি করতে JSONObject বর্গটি ব্যবহার করতে পারি। নিম্নলিখিত কোড ব্যবহার করুন।

JSONObject jObj = new JSONObject(contents.trim());
Iterator<?> keys = jObj.keys();

while( keys.hasNext() ) {
  String key = (String)keys.next();
  if ( jObj.get(key) instanceof JSONObject ) {           
    System.out.println(jObj.getString(String key));
  }
}

2
এটি কেবল অ্যান্ড্রয়েড
íubomír

এটি কেবল অ্যান্ড্রয়েড নয়: ডকস.অরাকল.com
জাভা /

1
@ ডার্মোটক্যানিফ এটি কেবল অ্যান্ড্রয়েড।
ব্যবহারকারী 4020527

1

আপনি ডিএসএম ব্যবহার করতে পারেনজটিল জসন এবং এক্সএমএল ডকুমেন্ট পার্স করার জন্য স্ট্রিম পার্সিং লাইব্রেরি । ডিএসএম কেবল একবার ডেটা পার্স করে এবং সমস্ত ডেটা মেমরিতে লোড করে না।

আসুন ধরা যাক প্রদত্ত জসন ডেটা ডিজিটালাইজ করার জন্য আমাদের পৃষ্ঠা শ্রেণি রয়েছে।

পৃষ্ঠা শ্রেণি

public class Page {
    private String pageName;
    private String pageImage;
    private List<Sting> postIds;

    // getter/setter

}

একটি ইয়ামল ম্যাপিং ফাইল তৈরি করুন।

result:
  type: object     # result is array
  path: /posts
  fields:
    pageName:
        path: /pageInfo/pageName
    pageImage:
        path: /pageInfo/pagePic
    postIds:
      path: post_id
      type: array

ক্ষেত্রগুলি নিষ্কাশন করতে ডিএসএম ব্যবহার করুন।

DSM dsm=new DSMBuilder(new File("path-to-yaml-config.yaml")).create(Page.class);
Page page= (Page)dsm.toObject(new path-to-json-data.json");

পৃষ্ঠা ভেরিয়েবল জিসন-এ সিরিয়ালাইজড:

{
  "pageName" : "abc",
  "pageImage" : "http://example.com/content.jpg",
  "postIds" : [ "123456789012_123456789012" ]
}

জটিল জসন এবং এক্সএমএল জন্য ডিএসএম খুব ভাল।


0

আপনি JsonNodeআপনার JSON স্ট্রিংয়ের কাঠামোগত গাছ উপস্থাপনের জন্য ব্যবহার করতে পারেন । এটি রক সলিড জ্যাকসন লাইব্রেরির অংশ যা সর্বব্যাপী।

ObjectMapper mapper = new ObjectMapper();
JsonNode yourObj = mapper.readTree("{\"k\":\"v\"}");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.