জাভা দিয়ে জেএসএনআররে আইটেমের সদস্যদের অ্যাক্সেস করা


122

আমি শুধু জাভা দিয়ে জসন ব্যবহার করে শুরু করছি। আমি নিশ্চিত না যে কীভাবে JSONArray এর মধ্যে স্ট্রিংয়ের মানগুলি অ্যাক্সেস করা যায়। উদাহরণস্বরূপ, আমার জেসন এটির মতো দেখাচ্ছে:

{
  "locations": {
    "record": [
      {
        "id": 8817,
        "loc": "NEW YORK CITY"
      },
      {
        "id": 2873,
        "loc": "UNITED STATES"
      },
      {
        "id": 1501
        "loc": "NEW YORK STATE"
      }
    ]
  }
}

আমার কোড:

JSONObject req = new JSONObject(join(loadStrings(data.json),""));
JSONObject locs = req.getJSONObject("locations");
JSONArray recs = locs.getJSONArray("record");

এই মুহুর্তে আমার কাছে "রেকর্ড" JSONArray এ অ্যাক্সেস রয়েছে তবে আমি লুপের মধ্যে কীভাবে "আইডি" এবং "লোক" মান পাব তা সম্পর্কে নিশ্চিত নই। দুঃখিত যদি এই বিবরণটি খুব পরিষ্কার না হয় তবে আমি প্রোগ্রামিংয়ে কিছুটা নতুন।


2
অন্য একটি জিনিস (সম্ভবত আপনি এটি খুঁজে পেয়েছেন) - আপনি তৃতীয় আইডি মানের পরে কমাটি মিস করেছেন। এটা ভালো সবসময় উদাহরণস্বরূপ, কিছু পার্সার ব্যবহার json.parser.online.fr
Krystian

উত্তর:


218

আপনার লুপটি তৈরি করতে আপনি JSONArray.getJSONObject (int) এবং JSONArray.length () ব্যবহার করে চেষ্টা করেছেন :

for (int i = 0; i < recs.length(); ++i) {
    JSONObject rec = recs.getJSONObject(i);
    int id = rec.getInt("id");
    String loc = rec.getString("loc");
    // ...
}

আমি এই না। আমরা পেতে পারেন, তাহলে idএকটি sinple সঙ্গে getIntকীভাবে আমরা কী নির্দিষ্ট করে একটি hashmap মান পেতে চাই, তাহলে কেন আমরা বারবার লুপ জন্য একটি সঙ্গে রয়েছে? লুপের সাথে পুনরাবৃত্তিটি একাধিকবার idনির্ধারিত হয়ে যায় না int id?
নাভ


আমি পিএইচপি করার জন্য এটি কীভাবে করতে পারি?
হ্যানি আসেমি

আমি আইডি জানি তবে ম্যাচের লোকের প্রয়োজন হলে কীভাবে এই কাজ করবে?
টুফানহাস

6

একটি org.json.JSONArray পুনরাবৃত্ত হয় না। নেট.এসফ.জসন.জেএসএনআররে
আমি কীভাবে উপাদানগুলিকে প্রক্রিয়াজাত করব তা এখানে :

    JSONArray lineItems = jsonObject.getJSONArray("lineItems");
    for (Object o : lineItems) {
        JSONObject jsonLineItem = (JSONObject) o;
        String key = jsonLineItem.getString("key");
        String value = jsonLineItem.getString("value");
        ...
    }

দুর্দান্ত কাজ করে ... :)


10
এটি আমার পক্ষে কাজ করে না, যেহেতু একটি JSONArrayপুনরাবৃত্তিযোগ্য নয়।
michel404

8
org.json.JSONArray পুনরুক্তিযোগ্য নয়, তবে নেট .sf.json.JSONArray স্বাদযুক্ত
majgis

আপনার লিঙ্কটি নষ্ট
VdeX

4

জাভা 8 প্রায় 2 দশক পরে বাজারে আসে, নীচে জাভা 8 org.json.JSONArrayস্ট্রিম এপিআই দিয়ে পুনরাবৃত্তি করার উপায়টি নিম্নরূপ।

import org.json.JSONArray;
import org.json.JSONObject;

@Test
public void access_org_JsonArray() {
    //Given: array
    JSONArray jsonArray = new JSONArray(Arrays.asList(new JSONObject(
                    new HashMap() {{
                        put("a", 100);
                        put("b", 200);
                    }}
            ),
            new JSONObject(
                    new HashMap() {{
                        put("a", 300);
                        put("b", 400);
                    }}
            )));

    //Then: convert to List<JSONObject>
    List<JSONObject> jsonItems = IntStream.range(0, jsonArray.length())
            .mapToObj(index -> (JSONObject) jsonArray.get(index))
            .collect(Collectors.toList());

    // you can access the array elements now
    jsonItems.forEach(arrayElement -> System.out.println(arrayElement.get("a")));
    // prints 100, 300
}

যদি পুনরাবৃত্তিটি কেবলমাত্র একবার হয়, (কোনও প্রয়োজন নেই .collect)

    IntStream.range(0, jsonArray.length())
            .mapToObj(index -> (JSONObject) jsonArray.get(index))
            .forEach(item -> {
               System.out.println(item);
            });

1
.mapToObjশো "Unhandled ব্যতিক্রম: JSONException"
Andrejs

1
সিনট্যাক্সে .mapToObj(index -> (JSONObject) array.get(index)), jsonArray.get(index)সেখানে সম্ভবত যা ছুঁড়ে ফেলতে পারে JSONExceptionতবে JSONException extends RuntimeException
কমপ্লেলে

2

আপনার কোডটি দেখে, আমি বুঝতে পারছি আপনি JSONLIB ব্যবহার করছেন। যদি এমনটি হয় তবে json অ্যারেটিকে জাভা অ্যারেতে রূপান্তর করতে নীচের স্নিপেটটি দেখুন ..

 JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( input );  
 JsonConfig jsonConfig = new JsonConfig();  
 jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY );  
 jsonConfig.setRootClass( Integer.TYPE );  
 int[] output = (int[]) JSONSerializer.toJava( jsonArray, jsonConfig );  

0

যদি এটি অন্য কাউকে সহায়তা করে তবে আমি এই জাতীয় কিছু করে অ্যারে রূপান্তর করতে সক্ষম হয়েছি,

JSONObject jsonObject = (JSONObject)new JSONParser().parse(jsonString);
((JSONArray) jsonObject).toArray()

... বা আপনার দৈর্ঘ্য পেতে সক্ষম হওয়া উচিত

((JSONArray) myJsonArray).toArray().length

org.json.JSONObjectএকটি toJSONArray(JSONArray names)পদ্ধতি আছে এবং org.json.JSONArrayএকটি toJSONObject(JSONArray names)পদ্ধতি আছে তবে এটির কোনও toArray()পদ্ধতি নেই।
ব্রিওনস

-1

হ্যাশম্যাপ রেগস = (হ্যাশম্যাপ) পার্সার.পারস (স্ট্রিংজসন);

(স্ট্রিং) (( হ্যাশম্যাপ ) regs.get ("ফার্স্টলেভেলি")) পান ("দ্বিতীয় স্তরের");


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