मान लें कि मेरे पास एक JSON ऑब्जेक्ट है जो एक इकाई का प्रतिनिधित्व करता है (कोई भी इकाई हो सकती है) जैसे:

{
    "entity_id": "1",
    "entity_name": "employee",
    "entity_json": {
        "employee_id": "e01",
        "employee_name": "john",
        "employee_phone_numbers": [
            "1234567",
            "8765433"
        ]
    }
}

ध्यान दें कि entity_json अलग-अलग संरचनाओं वाली विभिन्न संस्थाओं का प्रतिनिधित्व कर सकता है, जब तक कि यह एक वैध JSON है। उदाहरण के लिए, निम्नलिखित एक अन्य इकाई का प्रतिनिधित्व है:

{
    "entity_id": "1",
    "entity_name": "invoice",
    "entity_json": {
        "invoice_id": "1011",
        "items": {
            "item_id": "1",
            "quantity": "3",
            "price": "$100"
        },
        "date": "01-01-2020",
        "customer": {
            "id": "3",
            "address": {
                "street": "some_street",
                "country": "CZ",
                ...
            }
        }
    }
}

मैं जावा में Gson का उपयोग करके इस JSON को एक इकाई POJO में आंशिक रूप से पार्स करने में सक्षम होना चाहता हूं। यही है, मेरे पास एक इकाई POJO होगी जैसा कि नीचे दिखाया गया है:

public class Entity {
    private String entity_id;
    private String entity_name;
    private String entity_json;  // <-- entity_json is a String

    // getters and setters
}


/*
 * entity_json (for employee) = "{ \"employee_id\": \"1\", \"employee... }"
 * entity_json (for invoice) = "{ \"invoice_id\": \"1011\", \"items... }"
 */

और मैं JsonPath का उपयोग करके entity_json पर कोई भी ऑपरेशन करने की योजना बना रहा हूं।

क्या कोई तरीका है कि मैं इसे JSON संरचना में स्पष्ट रूप से entity_json सेट किए बिना प्राप्त कर सकता हूं, जो बचने वाली स्ट्रिंग के रूप में है?

यहां किसी भी मदद की सराहना की जाती है। धन्यवाद!

1
K.N. Bhargav 15 जून 2020, 09:12

1 उत्तर

सबसे बढ़िया उत्तर

आप Gson के JsonObject का उपयोग करके अपने entity_json के लिए String का उपयोग करने से बच सकते हैं।

यहाँ मेरी संशोधित Entity कक्षा है:

import com.google.gson.JsonObject;

public class MyEntity {

    private String entity_id;
    private String entity_name;
    private JsonObject entity_json;

    // getters and setters not shown

}

फिर आप उदाहरणों को निम्नानुसार पॉप्युलेट कर सकते हैं:

MyEntity myEntityOne = new Gson().fromJson(JSON_ONE, MyEntity.class);
MyEntity myEntityTwo = new Gson().fromJson(JSON_TWO, MyEntity.class);

System.out.println(myEntityOne.getEntity_json());
System.out.println(myEntityTwo.getEntity_json());

उपरोक्त कोड में, JSON_ONE और JSON_TWO केवल स्ट्रिंग हैं जिनमें आपके प्रश्न के दो नमूना JSON हैं।

कंसोल निम्नलिखित प्रिंट करता है (संक्षिप्तता के लिए छीन लिया गया):

{"employee_id":"e01","employee_name":"john","employee_phone_numbers":["1234567","8765433"]}
{"invoice_id":"1011","items":{"item_id":"1","quantity":"3","price":"$100"},"date":"01-01-2020"...

बेशक, अब आप आवश्यकतानुसार प्रत्येक entity_json फ़ील्ड में हेरफेर करने के लिए Gson का उपयोग कर सकते हैं, क्योंकि प्रत्येक स्वयं एक मान्य JSON ऑब्जेक्ट है।

0
andrewjames 18 जून 2020, 21:47