एकता में सीरीज़ और देशज और जर्सन ऐरे का वर्णन करें


96

मेरे पास उपयोग करने के लिए एकता के लिए PHP फ़ाइल से भेजे जाने वाले आइटमों की एक सूची है WWW

WWW.textऐसा लगता है कि:

[
    {
        "playerId": "1",
        "playerLoc": "Powai"
    },
    {
        "playerId": "2",
        "playerLoc": "Andheri"
    },
    {
        "playerId": "3",
        "playerLoc": "Churchgate"
    }
]

मैं कहां से अतिरिक्त ट्रिम []से string। जब मैं इसका उपयोग करके पार्स करने की कोशिश करता हूं Boomlagoon.JSON, तो केवल पहली वस्तु को पुनर्प्राप्त किया जाता है। मुझे पता चला कि मेरे पास deserialize()सूची में है और मिनीजन्स को आयात किया है।

लेकिन मैं उलझन में हूं कि deserialize()यह सूची कैसी है । मैं हर JSON ऑब्जेक्ट के माध्यम से लूप करना चाहता हूं और डेटा पुनर्प्राप्त करता हूं। मैं C # का उपयोग करके एकता में यह कैसे कर सकता हूं?

मैं जिस वर्ग का उपयोग कर रहा हूं वह है

public class player
{
    public string playerId { get; set; }
    public string playerLoc { get; set; }
    public string playerNick { get; set; }
}

ट्रिमिंग के बाद []मैं मिनीसन का उपयोग कर जसन को पार्स करने में सक्षम हूं। लेकिन यह केवल पहली बार लौट रहा है KeyValuePair

IDictionary<string, object> players = Json.Deserialize(serviceData) as IDictionary<string, object>;

foreach (KeyValuePair<string, object> kvp in players)
{
    Debug.Log(string.Format("Key = {0}, Value = {1}", kvp.Key, kvp.Value));
}

धन्यवाद!


आप बाहरी क्यों निकाल दिया [और ]? वही इसे सूची बनाता है। बस इसे हटाना बंद करें, और इसे एक सरणी या एक सूची के रूप में deserialize करें और मुझे उम्मीद है कि यह ठीक होगा। कृपया उस कोड को पोस्ट करें जिसे आपने आज़माया है।
जॉन स्कीट

हमें वशीकरण के लिए इस्तेमाल की जाने वाली कक्षा दिखाएँ। प्रारूप अजीब है, दूसरे खिलाड़ी को घुंघराले ब्रेसिज़ के अंदर क्यों नहीं लपेटा जाता है? यह कुछ, जैसे की एक सूची के लिए deserialize चाहिए List<PlayerLocation>, क्योंकि इस है एक सरणी।
मैक्सिमिलियन गेरहार्ट

@MaximilianGerhardt क्षमा करें घुंघराले ब्रेसिज़ एक टाइपो था। प्रश्न में इसे ठीक किया और कोड भी जोड़ा। धन्यवाद।
dil33pm

1
मुझे लगता है कि इस पुस्तकालय के बारे में आपकी समझ में कुछ गड़बड़ है, यहाँ डिसरिज़लिज़ेशन को संभालता है। यह सामान्य डीरियलाइज़ेशन नहीं है (जैसा कि आप शायद देख रहे हैं Newtonsoft.Json), लेकिन Json.Deserialize()हमेशा आपके लिए एक वापसी करता IDictionary<string,object>है और आप पर काम करते हैं List<object>। को देखो stackoverflow.com/a/22745634/5296568 । अधिमानतः, एक बेहतर JSON डिसेरिएलाइज़र प्राप्त करें जो आपके द्वारा उपयोग किए जाने वाले डिसेरिएलाइज़ेशन को करता है।
मैक्सिमिलियन गेरहार्ट

@MaximilianGerhardt के साथ मैंने कोशिश की IDictionary<string,object>। मैं मूल्य प्राप्त करने में सक्षम हूं, लेकिन केवल पहले KeyValuePair<>
dil33pm

जवाबों:


245

5.3.3 अपडेट के बाद एकता ने अपने एपीआई में JsonUtility को जोड़ा । जब तक आप कुछ अधिक जटिल नहीं कर रहे हैं, सभी 3 पार्टी पुस्तकालयों के बारे में भूल जाएं। JsonUtility अन्य Json पुस्तकालयों की तुलना में तेज है। एकता 5.3.3 संस्करण या इसके बाद के संस्करण के लिए अद्यतन करें फिर नीचे दिए गए समाधान का प्रयास करें।

JsonUtilityएक हल्का एपीआई है। केवल सरल प्रकार समर्थित हैं। यह शब्दकोश जैसे संग्रह का समर्थन नहीं करता है । एक अपवाद है List। यह समर्थन Listऔर Listसरणी!

अगर आपको Dictionaryसिंपल सीरियलाइज़ करने और सिंपल डिटैटेप्स को डिसरसाइज़ करने के अलावा कुछ और करने की ज़रूरत है, तो थर्ड-पार्टी एपीआई का इस्तेमाल करें। अन्यथा, पढ़ना जारी रखें।

क्रमबद्ध करने के लिए उदाहरण वर्ग:

[Serializable]
public class Player
{
    public string playerId;
    public string playerLoc;
    public string playerNick;
}

1. वन डेटा (नॉन-एआरआरवाई जॉन्सन)

भाग एक को क्रमबद्ध करना :

public static string ToJson(object obj);विधि के साथ Json के लिए सीरियल करें ।

Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";

//Convert to JSON
string playerToJson = JsonUtility.ToJson(playerInstance);
Debug.Log(playerToJson);

आउटपुट :

{"playerId":"8484239823","playerLoc":"Powai","playerNick":"Random Nick"}

पार्ट बी को सीरियलाइज़ करना :

public static string ToJson(object obj, bool prettyPrint);विधि अधिभार के साथ Json के लिए सीरियल करें । बस फंक्शन में जाने trueसे JsonUtility.ToJsonडेटा फॉर्मेट हो जाएगा। ऊपर दिए गए आउटपुट की तुलना नीचे के आउटपुट से करें।

Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";

//Convert to JSON
string playerToJson = JsonUtility.ToJson(playerInstance, true);
Debug.Log(playerToJson);

आउटपुट :

{
    "playerId": "8484239823",
    "playerLoc": "Powai",
    "playerNick": "Random Nick"
}

भाग एक का वर्णन :

public static T FromJson(string json);विधि अधिभार के साथ जर्स का वर्णन करें ।

string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
Player player = JsonUtility.FromJson<Player>(jsonString);
Debug.Log(player.playerLoc);

Deserializing भाग B :

public static object FromJson(string json, Type type);विधि अधिभार के साथ जर्स का वर्णन करें ।

string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
Player player = (Player)JsonUtility.FromJson(jsonString, typeof(Player));
Debug.Log(player.playerLoc);

भाग सी का वर्णन :

Deserialize साथ json public static void FromJsonOverwrite(string json, object objectToOverwrite);विधि। जब JsonUtility.FromJsonOverwriteउपयोग किया जाता है, तो उस वस्तु का कोई नया उदाहरण नहीं है जिसे आप बनाने के लिए इच्छुक हैं। यह आपके द्वारा पास किए गए उदाहरण को पुनः उपयोग करेगा और इसके मूल्यों को अधिलेखित करेगा।

यह कुशल है और यदि संभव हो तो इसका उपयोग किया जाना चाहिए।

Player playerInstance;
void Start()
{
    //Must create instance once
    playerInstance = new Player();
    deserialize();
}

void deserialize()
{
    string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";

    //Overwrite the values in the existing class instance "playerInstance". Less memory Allocation
    JsonUtility.FromJsonOverwrite(jsonString, playerInstance);
    Debug.Log(playerInstance.playerLoc);
}

2. मल्टीपल डेटा (ARRAY JSON)

आपके Json में कई डेटा ऑब्जेक्ट हैं। उदाहरण के लिए एकplayerId से अधिक बार दिखाई दिया । यूनिटी JsonUtilityसरणी का समर्थन नहीं करता है क्योंकि यह अभी भी नया है लेकिन आप इस व्यक्ति से सहायक वर्ग का उपयोग कर सकते हैं जिससे सरणी काम कर सके JsonUtility

नामक एक क्लास बनाएं JsonHelper। नीचे से सीधे JsonHelper की प्रतिलिपि बनाएँ।

public static class JsonHelper
{
    public static T[] FromJson<T>(string json)
    {
        Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
        return wrapper.Items;
    }

    public static string ToJson<T>(T[] array)
    {
        Wrapper<T> wrapper = new Wrapper<T>();
        wrapper.Items = array;
        return JsonUtility.ToJson(wrapper);
    }

    public static string ToJson<T>(T[] array, bool prettyPrint)
    {
        Wrapper<T> wrapper = new Wrapper<T>();
        wrapper.Items = array;
        return JsonUtility.ToJson(wrapper, prettyPrint);
    }

    [Serializable]
    private class Wrapper<T>
    {
        public T[] Items;
    }
}

सीरियल एरिंग जसन ऐरे :

Player[] playerInstance = new Player[2];

playerInstance[0] = new Player();
playerInstance[0].playerId = "8484239823";
playerInstance[0].playerLoc = "Powai";
playerInstance[0].playerNick = "Random Nick";

playerInstance[1] = new Player();
playerInstance[1].playerId = "512343283";
playerInstance[1].playerLoc = "User2";
playerInstance[1].playerNick = "Rand Nick 2";

//Convert to JSON
string playerToJson = JsonHelper.ToJson(playerInstance, true);
Debug.Log(playerToJson);

आउटपुट :

{
    "Items": [
        {
            "playerId": "8484239823",
            "playerLoc": "Powai",
            "playerNick": "Random Nick"
        },
        {
            "playerId": "512343283",
            "playerLoc": "User2",
            "playerNick": "Rand Nick 2"
        }
    ]
}

विवादास्पद जसन ऐरे :

string jsonString = "{\r\n    \"Items\": [\r\n        {\r\n            \"playerId\": \"8484239823\",\r\n            \"playerLoc\": \"Powai\",\r\n            \"playerNick\": \"Random Nick\"\r\n        },\r\n        {\r\n            \"playerId\": \"512343283\",\r\n            \"playerLoc\": \"User2\",\r\n            \"playerNick\": \"Rand Nick 2\"\r\n        }\r\n    ]\r\n}";

Player[] player = JsonHelper.FromJson<Player>(jsonString);
Debug.Log(player[0].playerLoc);
Debug.Log(player[1].playerLoc);

आउटपुट :

पवई

User 2


यदि यह सर्वर से Json सरणी है और आपने इसे हाथ से नहीं बनाया है :

आपको {"Items":प्राप्त स्ट्रिंग के सामने जोड़ना पड़ सकता है, फिर }इसके अंत में जोड़ें ।

मैंने इसके लिए एक सरल कार्य किया:

string fixJson(string value)
{
    value = "{\"Items\":" + value + "}";
    return value;
}

तो आप इसका उपयोग कर सकते हैं:

string jsonString = fixJson(yourJsonFromServer);
Player[] player = JsonHelper.FromJson<Player>(jsonString);

3.Deserialize json string बिना क्लास && डी-सीरीज़िंग Json के सांख्यिक गुणों के साथ

यह एक Json है जो एक संख्या या संख्यात्मक गुणों से शुरू होता है।

उदाहरण के लिए:

{ 
"USD" : {"15m" : 1740.01, "last" : 1740.01, "buy" : 1740.01, "sell" : 1744.74, "symbol" : "$"}, 

"ISK" : {"15m" : 179479.11, "last" : 179479.11, "buy" : 179479.11, "sell" : 179967, "symbol" : "kr"},

"NZD" : {"15m" : 2522.84, "last" : 2522.84, "buy" : 2522.84, "sell" : 2529.69, "symbol" : "$"}
}

एकता JsonUtilityइसका समर्थन नहीं करती है क्योंकि "15 मी" संपत्ति एक संख्या से शुरू होती है। एक वर्ग चर एक पूर्णांक के साथ शुरू नहीं हो सकता है।

SimpleJSON.csएकता की विकि से डाउनलोड करें ।

USD की "15 मी" संपत्ति प्राप्त करने के लिए:

var N = JSON.Parse(yourJsonString);
string price = N["USD"]["15m"].Value;
Debug.Log(price);

ISK की "15 मी" संपत्ति पाने के लिए:

var N = JSON.Parse(yourJsonString);
string price = N["ISK"]["15m"].Value;
Debug.Log(price);

NZD की "15 मी" संपत्ति पाने के लिए:

var N = JSON.Parse(yourJsonString);
string price = N["NZD"]["15m"].Value;
Debug.Log(price);

बाकी जितने गुण जो कि एक संख्यात्मक अंक से शुरू नहीं होते हैं, उन्हें एकता के JsonUtility द्वारा नियंत्रित किया जा सकता है।


4.TROUBLESHOOTING JsonUtility:

समस्याएँ जब के साथ serializing JsonUtility.ToJson?

खाली स्ट्रिंग या " {}" के साथ हो रही है JsonUtility.ToJson?

। सुनिश्चित करें कि वर्ग एक सरणी नहीं है। यदि ऐसा है, तो इसके JsonHelper.ToJsonबजाय ऊपर सहायक वर्ग का उपयोग करें JsonUtility.ToJson

बी[Serializable]उस वर्ग के शीर्ष पर जोड़ें जिसे आप क्रमबद्ध कर रहे हैं।

सी । वर्ग से संपत्ति निकालें। उदाहरण के लिए, चर में, public string playerId { get; set; } निकालें { get; set; } । एकता इसे क्रमबद्ध नहीं कर सकती।

समस्याओं के साथ deserializing जब JsonUtility.FromJson?

। यदि आपको मिलता है Null, तो सुनिश्चित करें कि Json एक Json सरणी नहीं है। यदि ऐसा है, तो इसके JsonHelper.FromJsonबजाय ऊपर सहायक वर्ग का उपयोग करें JsonUtility.FromJson

बी । यदि आप NullReferenceExceptiondeserializing करते हैं, [Serializable]तो कक्षा के शीर्ष पर जोड़ें ।

C। कोई अन्य समस्या, सत्यापित करें कि आपका json मान्य है। यहाँ इस साइट पर जाएँ और json पेस्ट करें। यह आपको दिखाना चाहिए कि क्या json मान्य है। यह भी Json के साथ उचित वर्ग उत्पन्न करना चाहिए। बस को हटाना न भूलें निकालें { get; set; } प्रत्येक चर से और भी जोड़ [Serializable]उत्पन्न प्रत्येक वर्ग के शीर्ष करने के लिए।


Newtonsoft.Json:

यदि किसी कारण से Newtonsoft.Json का उपयोग किया जाना चाहिए, तो यहां एकता के लिए forked संस्करण देखें । ध्यान दें कि यदि कुछ सुविधा का उपयोग किया जाता है तो आप दुर्घटना का अनुभव कर सकते हैं। सावधान रहे।


अपने प्रश्न का उत्तर देने के लिए :

आपका मूल डेटा है

 [{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]

जोड़े {"Items": में सामने की यह तो जोड़ने } पर अंत इसके बारे में।

यह करने के लिए कोड:

serviceData = "{\"Items\":" + serviceData + "}";

अब आपके पास है:

 {"Items":[{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]}

Php से सरणियों के रूप में कई डेटा क्रमबद्ध करने के लिए , अब आप कर सकते हैं

public player[] playerInstance;
playerInstance = JsonHelper.FromJson<player>(serviceData);

playerInstance[0] आपका पहला डेटा है

playerInstance[1] आपका दूसरा डेटा है

playerInstance[2] आपका तीसरा डेटा है

या के साथ वर्ग के अंदर डेटा playerInstance[0].playerLoc, playerInstance[1].playerLoc, playerInstance[2].playerLoc......

आप playerInstance.Lengthइसे एक्सेस करने से पहले लंबाई की जांच करने के लिए उपयोग कर सकते हैं ।

नोट: कक्षा से निकालें । यदि आपके पास है , तो यह काम नहीं करेगा। एकता के वर्ग के सदस्यों के साथ काम नहीं करता है जिन्हें गुणों के रूप में परिभाषित किया गया है{ get; set; }player{ get; set; }JsonUtility


मैं mysqlउपयोग करके PHP से क्वेरी की पंक्तियों की एक सरणी लौटा रहा हूं json_encode($row)। तो प्रतिक्रिया में प्रारूप में कई JSONObjects शामिल हैं [{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]। मैंने JsonUtility की कोशिश की, लेकिन मैं वस्तुओं को अलग नहीं कर सका और व्यक्तिगत json ऑब्जेक्ट प्राप्त कर सका। अगर आप मेरी मदद कर सकते हैं।
dil33pm

2
मेरे द्वारा ऊपर पोस्ट किए गए कोड को देखें। यह आपको ऐसा करने के तीन तरीके दिखाता है JsonUtility.FromJson। मैं आपको क्लास { get; set; }से निकालने के लिए कहना भूल गया player। यदि आपके पास है { get; set; }, तो यह काम नहीं करेगा। अपनी playerकक्षा की तुलना मैंने ऊपर की पोस्ट के साथ की और आप समझ जाएंगे कि मैं क्या कह रहा हूं।
प्रोग्रामर

1
कोई दिक्कत नहीं है। मैं इसे तब संपादित करूंगा जब यूनिटी सरणी के लिए समर्थन जोड़ता है (जो बहुत जल्द है) इसलिए आपको उस हेल्पर वर्ग की आवश्यकता नहीं होगी।
प्रोग्रामर

1
मैं यह कहना नहीं चाहूंगा कि "सभी 3 पार्टी पुस्तकालयों के बारे में भूल जाओ"। JsonUtility की सीमाएँ हैं। यह एक JSON ऑब्जेक्ट वापस नहीं करता है जिस पर आप कार्रवाई कर सकते हैं। उदाहरण के लिए, मुझे एक json फाइल मिलती है और यह जांचना चाहता हूं कि "सफलता" कुंजी उपलब्ध है या नहीं। नहीं कर सकते। JsonUtility के लिए उपभोक्ता को json फ़ाइल की सही सामग्री की आवश्यकता होती है। इसके अलावा, कोई शब्दकोश कनवर्टर। तो यह कुछ अच्छी चीजें करता है लेकिन 3 डी पार्टी का उपयोग अभी भी आवश्यक है।
एवरेट्स

2
का उपयोग करें JsonHelper। यह ठीक है। यदि आप इसके साथ Json बनाते हैं, तो आप अतिरिक्त चरणों के बिना भी इसके साथ json पढ़ सकते हैं। अतिरिक्त सामान करने के लिए केवल समय की आवश्यकता हो सकती है यदि आप सर्वर से json सरणी प्राप्त कर रहे हैं और जो समाधान में शामिल है वह मेरे उत्तर में है। इसके बिना एक और तरीका JsonHelperहै कि कक्षा को दूसरी कक्षा में रखा जाए, फिर उसे ए बना लें List। यह ज्यादातर लोगों के लिए काम कर रहा है। आप देख रहे हैं एक तरह से लोड खेल डेटा बचाने के लिए और करने के लिए फिर देखें कि यहआप कोड की एक पंक्ति के साथ लोड और सहेजते हैं।
प्रोग्रामर

17

मान लें कि आपको इस तरह से JSON मिला है

[
    {
        "type": "qrcode",
        "symbol": [
            {
                "seq": 0,
                "data": "HelloWorld9887725216",
                "error": null
            }
        ]
    }
]

उपरोक्त JSON को एकता में पार्स करने के लिए, आप इस तरह JSON मॉडल बना सकते हैं।

[System.Serializable]
public class QrCodeResult
{
    public QRCodeData[] result;
}

[System.Serializable]
public class Symbol
{
    public int seq;
    public string data;
    public string error;
}

[System.Serializable]
public class QRCodeData
{
    public string type;
    public Symbol[] symbol;
}

और फिर बस निम्नलिखित तरीके से पार्स करें ...

var myObject = JsonUtility.FromJson<QrCodeResult>("{\"result\":" + jsonString.ToString() + "}");

अब आप अपनी आवश्यकता के अनुसार JSON / CODE को संशोधित कर सकते हैं। https://docs.unity3d.com/Manual/JSONSerialization.html


यह वास्तव में काफी अच्छी तरह से काम करता है, यह एक प्रतीक के रूप में एक वर्ग के साथ काम कर रहा है जो कि एक सरणी नहीं है।
गेनन

4
मैं 2018 की एकता के साथ यह कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है: सरणियों को पार्स नहीं किया गया है
जीन-माइकल सेलेरिएर

2018 और 2019 की एकता में प्रयुक्त। सरणी डेटा तक पहुंचें जैसे: Debug.Log(myObject.result[0].symbol[0].data);या for(var i = 0; i <= myObject.result.Length - 1; i ++) { Debug.Log(myObject.result[i].type); }याforeach (var item in myObject.result) { Debug.Log(item.type); }
टावर्स

@ नरोत्तम गोयल, आपका तरीका कुछ मामलों में काम नहीं कर रहा है, शुरुआती लोगों के लिए भी एक बहुत ही कठिन समाधान है, इस उत्तर को इस थ्रेड लिंक पर देखें
जुनैद खान मोमिन

@JunedKhanMomin आपका उत्तर मूल रूप से एक ही है, लेकिन इस तथ्य को स्वीकार किए बिना कि यहां यह प्रश्न विशिष्ट JSON डेटा में रूट स्तर सरणी के बारे में था । सामान्य तौर पर आपको प्रोग्रामर के उत्तर को संदर्भित करना चाहिए जो कि अधिक विस्तृत है।
डेरूगो

2

आपको कक्षा में जोड़ना [System.Serializable]होगा PlayerItem, जैसे:

using System;
[System.Serializable]
public class PlayerItem   {
    public string playerId;
    public string playerLoc;
    public string playerNick;
}

0

ट्रिम न करें []और आपको ठीक होना चाहिए। []एक JSON सरणी की पहचान करें, जो वास्तव में आपके तत्वों को पुनरावृत्त करने में सक्षम होने के लिए आवश्यक है।


0

जैसे @Maximiliangerhardt ने कहा, MiniJson में ठीक से डिसरसाइज़ करने की क्षमता नहीं है। मैंने JsonFx का उपयोग किया और एक आकर्षण की तरह काम करता है। के साथ काम करता है[]

player[] p = JsonReader.Deserialize<player[]>(serviceData);
Debug.Log(p[0].playerId +" "+ p[0].playerLoc+"--"+ p[1].playerId + " " + p[1].playerLoc+"--"+ p[2].playerId + " " + p[2].playerLoc);

0

JSON फ़ाइल को पढ़ने के लिए, इस सरल उदाहरण को देखें

आपकी JSON फ़ाइल (StreamingAssets / Player.json)

{
    "Name": "MyName",
    "Level": 4
}

सी # स्क्रिप्ट

public class Demo
{
    public void ReadJSON()
    {
        string path = Application.streamingAssetsPath + "/Player.json";
        string JSONString = File.ReadAllText(path);
        Player player = JsonUtility.FromJson<Player>(JSONString);
        Debug.Log(player.Name);
    }
}

[System.Serializable]
public class Player
{
    public string Name;
    public int Level;
}

1
सरणियों के बारे में क्या? और यह जवाब क्या जोड़ता है जो 3 साल पहले से स्वीकृत जवाब में पहले से ही नहीं लिखा गया था?
derHugo

0

आप अपने प्रोजेक्ट में Newtonsoft.Jsonकेवल ऐड Newtonsoft.dllका उपयोग कर सकते हैं और स्क्रिप्ट के नीचे उपयोग कर सकते हैं

using System;
using Newtonsoft.Json;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    [Serializable]
    public class Person
    {
        public string id;
        public string name;
    }
    public Person[] person;

    private void Start()
    {
       var myjson = JsonConvert.SerializeObject(person);

        print(myjson);

    }
}

यहां छवि विवरण दर्ज करें

एक अन्य समाधान JsonHelper का उपयोग कर रहा है

using System;
using Newtonsoft.Json;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    [Serializable]
    public class Person
    {
        public string id;
        public string name;
    }
    public Person[] person;

    private void Start()
    {
        var myjson = JsonHelper.ToJson(person);

        print(myjson);

    }
}

यहां छवि विवरण दर्ज करें


0

यदि आप वेक्टर 3 का उपयोग कर रहे हैं तो यह वही है जो मैंने किया था

1 - मैं एक वर्ग का नाम यह खिलाड़ी बनाता हूं

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class Player
{
    public Vector3[] Position;

}

2- फिर मैं इसे इस तरह से कॉल करता हूं

if ( _ispressed == true)
        {
            Player playerInstance = new Player();
            playerInstance.Position = newPos;
            string jsonData = JsonUtility.ToJson(playerInstance);

            reference.Child("Position" + Random.Range(0, 1000000)).SetRawJsonValueAsync(jsonData);
            Debug.Log(jsonData);
            _ispressed = false;
        }

3- और यह परिणाम है

"स्थिति": [{"x": - 2.8567452430725099, "y": - 2.4323320388793947, "z": 0.0}]}


0

एकता <= 2019

नरोत्तम गोयल को एक एरोसन को एक ऑब्जेक्ट में लपेटने का अच्छा विचार था, और फिर एक संरचना में शामिल करना। निम्न सभी प्रकार के सरणियों के लिए इसे हल करने के लिए जेनरिक का उपयोग करता है, जैसा कि हर बार एक नया वर्ग बनाने के लिए विरोध किया जाता है।

[System.Serializable]
private struct JsonArrayWrapper<T> {
    public T wrap_result;
}

public static T ParseJsonArray<T>(string json) {
    var temp = JsonUtility.FromJson<JsonArrayWrapper<T>>("{\" wrap_result\":" + json + "}");
    return temp.wrap_result;
}

इसका उपयोग निम्नलिखित तरीके से किया जा सकता है:

string[] options = ParseJsonArray<string[]>(someArrayOfStringsJson);

एकता 2020

यूनिटी 2020 में एक आधिकारिक न्यूटनसॉफ्ट पैकेज है जो कि एक बेहतर जॉन्स लाइब्रेरी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.