সহজ জেএসওএন লাইব্রেরি সহ জাভাতে জেএসন ফাইলটি কীভাবে পড়বেন


95

আমি JSONjson সহ সাধারণ লাইব্রেরি ব্যবহার করে এই ফাইলটি পড়তে চাই ।

আমার JSONফাইলটি এমন দেখাচ্ছে:

[  
    {  
        "name":"John",
        "city":"Berlin",
        "cars":[  
            "audi",
            "bmw"
        ],
        "job":"Teacher"
    },
    {  
        "name":"Mark",
        "city":"Oslo",
        "cars":[  
            "VW",
            "Toyata"
        ],
        "job":"Doctor"
    }
]

এই জাভা কোডটি আমি এই ফাইলটি পড়তে লিখেছিলাম:

package javaapplication1;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

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

        JSONParser parser = new JSONParser();

        try {     
            Object obj = parser.parse(new FileReader("c:\\file.json"));

            JSONObject jsonObject =  (JSONObject) obj;

            String name = (String) jsonObject.get("name");
            System.out.println(name);

            String city = (String) jsonObject.get("city");
            System.out.println(city);

            String job = (String) jsonObject.get("job");
            System.out.println(job);

            // loop array
            JSONArray cars = (JSONArray) jsonObject.get("cars");
            Iterator<String> iterator = cars.iterator();
            while (iterator.hasNext()) {
             System.out.println(iterator.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

তবে আমি নিম্নলিখিত ব্যতিক্রম পাই:

থ্রেড "মূল" java.lang.ClassCastException: org.json.simple.JSONArray org.json.simple.JSONObject এ জাভা অ্যাপ্লিকেশন ১. জাভা অ্যাপ্লিকেশন ১.মেন (জাভা অ্যাপ্লিকেশন ১.জাভা ২৪) এ কাস্ট করা যাবে না

কেউ আমাকে বলতে পারে যে আমি কী ভুল করছি? পুরো ফাইলটি একটি অ্যারে এবং ফাইলের পুরো অ্যারেতে বস্তু এবং অন্য অ্যারে (গাড়ি) রয়েছে। তবে আমি জানি না কীভাবে আমি পুরো অ্যারেটিকে জাভা অ্যারে পার্স করতে পারি। আমি আশা করি যে কেউ আমার কোড কোডটি অনুপস্থিত একটি কোড লাইনে আমাকে সহায়তা করতে পারে।

ধন্যবাদ

উত্তর:


85

পুরো ফাইলটি একটি অ্যারে এবং ফাইলের পুরো অ্যারেতে বস্তু এবং অন্যান্য অ্যারে (যেমন গাড়ি) রয়েছে।

আপনি যেমনটি বলেছেন, আপনার জেএসওএন ব্লবটির বহিরাগত স্তরটি একটি অ্যারে। সুতরাং, আপনার পার্সার একটি ফিরে আসবে JSONArray। তারপরে আপনি JSONObjectঅ্যারে থেকে এস পেতে পারেন ...

  JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\exer4-courses.json"));

  for (Object o : a)
  {
    JSONObject person = (JSONObject) o;

    String name = (String) person.get("name");
    System.out.println(name);

    String city = (String) person.get("city");
    System.out.println(city);

    String job = (String) person.get("job");
    System.out.println(job);

    JSONArray cars = (JSONArray) person.get("cars");

    for (Object c : cars)
    {
      System.out.println(c+"");
    }
  }

রেফারেন্সের জন্য, জেসন-সরল ডিকোডিং উদাহরণ পৃষ্ঠায় "উদাহরণ 1" দেখুন ।


ধন্যবাদ এটি প্রথম অবজেক্ট কোর্স, প্রশিক্ষক, শিক্ষার্থী অ্যারে এবং শিরোনাম বস্তু পড়ে। আমি কীভাবে পরেরগুলি পড়তে পারি?
বিলজ

ঠিক আছে, আপনি অ্যারে থাকা সমস্ত আইটেম একটি লুপে প্রক্রিয়া করতে চান। আমার কোডটি সবেমাত্র আপনাকে প্রথম আইটেমটি দেয় ( a.get(0)) কারণ এটি ছিল আপনার মূল কোডের সবচেয়ে কাছের ম্যাচ। জসন-সিম্পল ডকুমেন্টেশনটি JSONArrayহ'ল একটি java.util.List, সুতরাং আপনি সাধারণ তালিকাটির মতো উপাদানগুলির উপরে পুনরাবৃত্তি করতে পারেন। এটাই কি যথেষ্ট?
গ্রেগ কফ্ফ

আমি চেষ্টা করেছি কিন্তু কাজ হয়নি। আপনি কি আমাকে একটি কোড উদাহরণ দিতে পারেন
বিলz

4
এটি দুর্দান্ত কাজ করে! দয়া করে নোট করুন: আমদানিটি উদাহরণ হিসাবে যেমনটি ব্যবহার করুন (যেমন 'সাধারণ' সহ), অন্যথায় এটি 'প্রত্যেকটির জন্য' অনুমতি দেবে না। ভুল: আমদানি org.json.JSONArray; আমদানি org.json.JSONObject; সঠিক: আমদানি করুন org.json.simple.JSONArray; আমদানি org.json.simple.JSONObject;
কৃষ্ণ সাপকোটা

4
parserএটি কোন গ্রন্থাগার থেকে (আমদানি) হয়?
ব্যবহারকারী 25

46

আপনি জ্যাকসন লাইব্রেরি ব্যবহার করতে পারেন এবং আপনার জসন ফাইলটিকে জাভা অবজেক্টে রূপান্তর করতে এই 3 টি লাইন ব্যবহার করতে পারেন।

ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);

4
আমি অবজেক্টম্যাপার জার লিঙ্কগুলি ডাউনলোড করতে জানি।
অভিষেক

4
@ রেন্সআবিশেক আপনি এটি দিয়ে আমদানি করুনimport com.fasterxml.jackson.databind.ObjectMapper;
রন কালিয়ান

11

জ্যাকসন ডাটাবাইন্ড যুক্ত করুন:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0.pr2</version>
</dependency>

সম্পর্কিত ক্ষেত্রগুলি দিয়ে ডিটিও ক্লাস তৈরি করুন এবং জেএসওএন ফাইলটি পড়ুন:

ObjectMapper objectMapper = new ObjectMapper();
ExampleClass example = objectMapper.readValue(new File("example.json"), ExampleClass.class);

10

জেসনফাইলে থেকে পড়া

public static ArrayList<Employee> readFromJsonFile(String fileName){
        ArrayList<Employee> result = new ArrayList<Employee>();

        try{
            String text = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8);

            JSONObject obj = new JSONObject(text);
            JSONArray arr = obj.getJSONArray("employees");

            for(int i = 0; i < arr.length(); i++){
                String name = arr.getJSONObject(i).getString("name");
                short salary = Short.parseShort(arr.getJSONObject(i).getString("salary"));
                String position = arr.getJSONObject(i).getString("position");
                byte years_in_company = Byte.parseByte(arr.getJSONObject(i).getString("years_in_company")); 
                if (position.compareToIgnoreCase("manager") == 0){
                    result.add(new Manager(name, salary, position, years_in_company));
                }
                else{
                    result.add(new OrdinaryEmployee(name, salary, position, years_in_company));
                }
            }           
        }
        catch(Exception ex){
            System.out.println(ex.toString());
        }
        return result;
    }

7

আপনি এর জন্য জিসন ব্যবহার করতে পারেন ।
GSONএকটি জাভা গ্রন্থাগার যা জাভা অবজেক্টগুলিকে তাদের JSONউপস্থাপনে রূপান্তর করতে ব্যবহার করা যেতে পারে । এটি রূপান্তর করতেও ব্যবহার করা যেতে পারেJSON স্ট্রিংকে একটি সমতুল্য জাভা অবজেক্টে ।

এই JSON কে জাভাতে রূপান্তর করে দেখুন


17
আপনি কি ভাবেন যে তার একটি লাইনে লাইব্রেরি বদলানো উচিত? তার প্রোগ্রামটি কাজ করার জন্য সর্বাধিক প্রত্যক্ষ রুট নয় ... ;-)
গ্রেগ কফ্ফ

5

গুগল-সরল লাইব্রেরি ব্যবহার করুন।

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

নীচের নমুনা কোডটি দয়া করে সন্ধান করুন:

public static void main(String[] args) {
    try {
        JSONParser parser = new JSONParser();
        //Use JSONObject for simple JSON and JSONArray for array of JSON.
        JSONObject data = (JSONObject) parser.parse(
              new FileReader("/resources/config.json"));//path to the JSON file.

        String json = data.toJSONString();
    } catch (IOException | ParseException e) {
        e.printStackTrace();
    }
}

সাধারণ JSON এর মতো {"id":"1","name":"ankur"}JSONObject এবং JSON এর মতো অ্যারের জন্য JSONArray ব্যবহার করুন [{"id":"1","name":"ankur"},{"id":"2","name":"mahajan"}]


4
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class Delete_01 {
    public static void main(String[] args) throws FileNotFoundException,
            IOException, ParseException {

        JSONParser parser = new JSONParser();
        JSONArray jsonArray = (JSONArray) parser.parse(new FileReader(
                "delete_01.json"));

        for (Object o : jsonArray) {
            JSONObject person = (JSONObject) o;

            String strName = (String) person.get("name");
            System.out.println("Name::::" + strName);

            String strCity = (String) person.get("city");
            System.out.println("City::::" + strCity);

            JSONArray arrays = (JSONArray) person.get("cars");
            for (Object object : arrays) {
                System.out.println("cars::::" + object);
            }
            String strJob = (String) person.get("job");
            System.out.println("Job::::" + strJob);
            System.out.println();

        }

    }
}

4

একই সমস্যার মুখোমুখি হওয়া অন্য কারও জন্য সহায়তা হতে পারে You আপনি ফাইলটি স্ট্রিং হিসাবে লোড করতে পারেন এবং তারপরে মানগুলিতে অ্যাক্সেসের জন্য স্ট্রিংটিকে জসনোবজেক্টে রূপান্তর করতে পারেন।

import java.util.Scanner;
import org.json.JSONObject;
String myJson = new Scanner(new File(filename)).useDelimiter("\\Z").next();
JSONObject myJsonobject = new JSONObject(myJson);

1

আশা করি এই উদাহরণটিও সহায়তা করবে

আমি নীচে json অ্যারে উদাহরণের জন্য একইভাবে জাভা কোডিং করেছি:

নীচে জসন ডেটা ফর্ম্যাট: "EMPJSONDATA.json" হিসাবে সঞ্চিত

[E "EMPNO": 275172, "EMP_NAME": "রেহান", "ডিওবি": "29-02-1992", "ডিওজে": "10-06-2013", "রোল": "জাভা ডেভেলপার"},

E "EMPNO": 275173, "EMP_NAME": "জিকে", "ডিওবি": "10-02-1992", "ডিওজে": "11-07-2013", "রোল": "উইন্ডোজ প্রশাসক"},

E "EMPNO": 275174, "EMP_NAME": "আবিরাম", "ডিওবি": "10-04-1992", "ডিওজে": "12-08-2013", "ভূমিকা": "প্রকল্প বিশ্লেষণ"}

E "EMPNO": 275174, "EMP_NAME": "মোহাম্মদ মুশি", "ডিওবি": "10-04-1992", "ডিওজে": "12-08-2013", "ভূমিকা": "প্রকল্প বিশ্লেষণ"}]

public class Jsonminiproject {

public static void main(String[] args) {

      JSONParser parser = new JSONParser();

    try {
        JSONArray a = (JSONArray) parser.parse(new FileReader("F:/JSON DATA/EMPJSONDATA.json"));
        for (Object o : a)
        {
            JSONObject employee = (JSONObject) o;

            Long no = (Long) employee.get("EMPNO");
            System.out.println("Employee Number : " + no);

            String st = (String) employee.get("EMP_NAME");
            System.out.println("Employee Name : " + st);

            String dob = (String) employee.get("DOB");
            System.out.println("Employee DOB : " + dob);

            String doj = (String) employee.get("DOJ");
            System.out.println("Employee DOJ : " + doj);

            String role = (String) employee.get("ROLE");
            System.out.println("Employee Role : " + role);

            System.out.println("\n");

        }


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }




}

}

অপ্রত্যাশিত টোকেন বাম ব্র্যাক ({) অবস্থান 156.
থাঙ্গা

1
package com.json;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class ReadJSONFile {

    public static void main(String[] args) {

        JSONParser parser = new JSONParser();

        try {
            Object obj = parser.parse(new FileReader("C:/My Workspace/JSON Test/file.json"));

            JSONArray array = (JSONArray) obj;
            JSONObject jsonObject = (JSONObject) array.get(0);

            String name = (String) jsonObject.get("name");
            System.out.println(name);

            String city = (String) jsonObject.get("city");
            System.out.println(city);

            String job = (String) jsonObject.get("job");
            System.out.println(job);

            // loop array
            JSONArray cars = (JSONArray) jsonObject.get("cars");
            Iterator<String> iterator = cars.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

}

আপনার জেএসওএন ফাইলটিতে অবজেক্টের অ্যারে রয়েছে তাই অ্যারেটি দিয়ে ট্র্যাভার করে
পি রাজেশ

4
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
তীমথিয় ট্রাকল

0

নমুনা জেসন

{
    "per_page": 3,
    "total": 12,
    "data": [{
            "last_name": "Bluth",
            "id": 1,
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg",
            "first_name": "George"
        },
        {
            "last_name": "Weaver",
            "id": 2,
            //"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg",
            "first_name": "Janet"
        },
        {
            "last_name": "Wong",
            "id": 3,
            //"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg",
            "first_name": "Emma"
        }
    ],
    "page": 1,
    "total_pages": 4
}

প্রথম যদি বিবৃতিটি দেহ থেকে একক ডেটা রূপান্তরিত করে তবে দ্বিতীয় বিবৃতি জসনআরে বস্তুকে আলাদা করবে

public static String getvalueJpath(JSONObject responseJson, String Jpath ) {
        Object obj = responseJson;
        for(String s : Jpath.split("/"))
            if (s.isEmpty())
                if(!(s.contains("[") || s.contains("]")))
                    obj = ((JSONObject) obj).get(s);
                else
                    if(s.contains("[") || s.contains("]"))
                        obj = ((JSONArray)((JSONObject)obj).get(s.split("\\[")[0])).get(Integer.parseInt(s.split("//[")[1].replaceAll("]", "")));

        return obj.toString();
    }
}

0

জ্যাকসন লাইব্রেরি ব্যবহার করে সমাধান। JSONLint.com এ জসন যাচাই করে এবং তারপরে জ্যাকসন ব্যবহার করে এই সমস্যাটি সমাধান করা হয়েছে। নীচে একই জন্য কোড দেওয়া হয়।

 Main Class:-

String jsonStr = "[{\r\n" + "       \"name\": \"John\",\r\n" + "        \"city\": \"Berlin\",\r\n"
                + "         \"cars\": [\r\n" + "            \"FIAT\",\r\n" + "          \"Toyata\"\r\n"
                + "     ],\r\n" + "     \"job\": \"Teacher\"\r\n" + "   },\r\n" + " {\r\n"
                + "     \"name\": \"Mark\",\r\n" + "        \"city\": \"Oslo\",\r\n" + "        \"cars\": [\r\n"
                + "         \"VW\",\r\n" + "            \"Toyata\"\r\n" + "     ],\r\n"
                + "     \"job\": \"Doctor\"\r\n" + "    }\r\n" + "]";

        ObjectMapper mapper = new ObjectMapper();

        MyPojo jsonObj[] = mapper.readValue(jsonStr, MyPojo[].class);

        for (MyPojo itr : jsonObj) {

            System.out.println("Val of getName is: " + itr.getName());
            System.out.println("Val of getCity is: " + itr.getCity());
            System.out.println("Val of getJob is: " + itr.getJob());
            System.out.println("Val of getCars is: " + itr.getCars() + "\n");

        }

POJO:

public class MyPojo {

private List<String> cars = new ArrayList<String>();

private String name;

private String job;

private String city;

public List<String> getCars() {
    return cars;
}

public void setCars(List<String> cars) {
    this.cars = cars;
}

public String getName() {
    return name;
}

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

public String getJob() {
    return job;
}

public void setJob(String job) {
    this.job = job;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
} }

  RESULT:-
         Val of getName is: John
         Val of getCity is: Berlin
         Val of getJob is: Teacher
         Val of getCars is: [FIAT, Toyata]

          Val of getName is: Mark
          Val of getCity is: Oslo
          Val of getJob is: Doctor
          Val of getCars is: [VW, Toyata]

0

আপনার জসন ফাইলটি দেখতে এ জাতীয় চেহারা

এখানে চিত্র বর্ণনা লিখুন

import java.io.*;
import java.util.*;
import org.json.simple.*;
import org.json.simple.parser.*;
public class JSONReadFromTheFileTest {
   public static void main(String[] args) {
      JSONParser parser = new JSONParser();
      try {
         Object obj = parser.parse(new FileReader("/Users/User/Desktop/course.json"));
         JSONObject jsonObject = (JSONObject)obj;
         String name = (String)jsonObject.get("Name");
         String course = (String)jsonObject.get("Course");
         JSONArray subjects = (JSONArray)jsonObject.get("Subjects");
         System.out.println("Name: " + name);
         System.out.println("Course: " + course);
         System.out.println("Subjects:");
         Iterator iterator = subjects.iterator();
         while (iterator.hasNext()) {
            System.out.println(iterator.next());
         }
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}

আউটপুট হয়

Name: Raja
Course: MCA
Subjects:
subject1: MIS
subject2: DBMS
subject3: UML

এখান থেকে নিয়ে গেছে


-2

আপনি রিডএলবাইট ব্যবহার করতে পারেন।

return String(Files.readAllBytes(Paths.get(filePath)),StandardCharsets.UTF_8);


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