Ialক্যে জসন এবং জসন অ্যারে সিরিয়ালাইজ এবং ডিজিজারাইজ করুন


99

আমার ব্যবহারের জন্য পিএইচপি ফাইল থেকে unityক্যের জন্য প্রেরণের আইটেমের একটি তালিকা রয়েছে WWW

WWW.textদেখে মনে হচ্ছে:

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

আমি কোথা থেকে অতিরিক্ত ছাঁটা []থেকে string। যখন আমি এটি ব্যবহার করে পার্স করার চেষ্টা করি Boomlagoon.JSON, কেবলমাত্র প্রথম বস্তুটি পুনরুদ্ধার করা হয়। আমি জানতে পেরেছি যে আমার deserialize()তালিকায় রয়েছে এবং মিনিজসন আমদানি করেছেন have

তবে আমি কীভাবে deserialize()এই তালিকাতে বিভ্রান্ত । আমি প্রতিটি JSON অবজেক্টের মধ্য দিয়ে লুপ করতে এবং ডেটা পুনরুদ্ধার করতে চাই। আমি কীভাবে সি # ব্যবহার করে ইউনিটিতে এটি করতে পারি?

আমি যে ক্লাসটি ব্যবহার করছি তা হচ্ছে

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));
}

ধন্যবাদ!


আপনি কেন বাইরেরটি সরিয়ে ফেললেন [এবং ]? এটাই এটিকে তালিকা তৈরি করে। কেবল এটি অপসারণ বন্ধ করুন এবং এটিকে একটি অ্যারে বা একটি তালিকা হিসাবে ডিজিজারাইজ করুন এবং আমি আশা করি এটি ঠিক আছে। আপনি চেষ্টা করেছেন যে কোড পোস্ট করুন।
জন স্কিটি

Deserialization জন্য ব্যবহৃত ক্লাস আমাদের দেখান। ফর্ম্যাটটি অদ্ভুত, দ্বিতীয় প্লেয়ারটি কেন কোঁকড়ানো ধনুর্বন্ধনী এর ভিতরে আবৃত হয় না? এটি কোনও কিছুর একটি তালিকাতে deserialize করা উচিত List<PlayerLocation>, কারণ এটি একটি অ্যারে।
ম্যাক্সিমিলিয়ান গেরহার্ড

@ ম্যাক্সিমিলিয়ান জারহার্ড দুঃখিত দুঃখিত কোঁকড়া ধনুর্বন্ধনী একটি টাইপ ছিল। এটি প্রশ্নের স্থির করে কোডটিও যুক্ত করেছে। ধন্যবাদ
dil33pm

4
আমি মনে করি এই গ্রন্থাগারটি এখানে ডিসরিয়ালাইজেশন পরিচালনা করার বিষয়ে আপনার বোঝার সাথে কিছু ভুল আছে । এটি সাধারণ deserialization নয় (যেমন আপনি সম্ভবত দেখতে পেয়েছেন Newtonsoft.Json), তবে Json.Deserialize()সর্বদা আপনাকে ফিরিয়ে IDictionary<string,object>দেয় এবং আপনি চালিত হন List<object>স্ট্যাকওভারফ্লো . com/a/22745634/5296568 এ দেখুন । অগ্রাধিকার হিসাবে, একটি ভাল জেএসএন ডিসরিওলাইজার পান যা আপনার ব্যবহৃত ডিসরিয়ালাইজেশন করে।
ম্যাক্সিমিলিয়ান গেরহার্ড

@MaximilianGerhardt আমি চেষ্টা IDictionary<string,object>। আমি মানটি বের করতে সক্ষম, তবে কেবল প্রথম KeyValuePair<>
dil33

উত্তর:


251

ইউনিটি যোগ JsonUtility পর তাদের API- এ 5.3.3 আপডেট করুন। আপনি আরও জটিল কিছু না করে তৃতীয় পক্ষের সমস্ত লাইব্রেরিগুলি সম্পর্কে ভুলে যান। জসন ইউটিলিটি অন্যান্য জসন লাইব্রেরির তুলনায় দ্রুত। ইউনিটি 5.3.3 সংস্করণ বা তারপরে আপডেট করুন তারপরে নীচের সমাধানটি চেষ্টা করুন।

JsonUtilityএকটি হালকা এপিআই। কেবল সহজ প্রকারের সমর্থিত। এটি অভিধানের মতো সংগ্রহগুলিকে সমর্থন করে না । এক ব্যতিক্রম নয় List। এটি সমর্থন করে Listএবং Listঅ্যারে!

আপনার যদি সিরিয়ালাইজ Dictionaryকরতে বা সাধারণ ডেটাটাইপগুলি কেবল সিরিয়ালাইজেশন এবং ডিসরিয়ালাইজিং ব্যতীত অন্য কিছু করতে হয় তবে একটি তৃতীয় পক্ষের API ব্যবহার করুন। অন্যথায়, পড়া চালিয়ে যান।

ক্রমিক উদাহরণ উদাহরণস্বরূপ:

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

১. একটি ডেটা অবজেক্ট (নন-অ্যারে জেএসন)

ধারাবাহিকী খণ্ড A :

পদ্ধতিটি দিয়ে জসনকে সিরিয়াল করুনpublic static string ToJson(object obj);

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);পদ্ধতি ওভারলোড দিয়ে জসনকে সিরিয়াল করুন । কেবল ফাংশনে পাস 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"
}

অংশ A কে নিষ্পত্তির :

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);

খণ্ড বি বিহীন করা :

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);

অংশ সি সিলেসিয়েজিং :

public static void FromJsonOverwrite(string json, object objectToOverwrite);পদ্ধতিটি সহ জসনকে ডিসরিয়ালাইজ করুন । কখন JsonUtility.FromJsonOverwriteব্যবহৃত হয়, সেই অবজেক্টের কোনও নতুন উদাহরণ তৈরি করা হবে না যার জন্য আপনি deserializing করছেন। এটি কেবল আপনি যে উদাহরণটি পাস করেছেন তা পুনরায় ব্যবহার করবে এবং এর মানগুলি ওভাররাইট করবে।

এটি দক্ষ এবং সম্ভব হলে ব্যবহার করা উচিত।

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);
}

২. একাধিক ডেটা (এয়ার জেএসন)

আপনার জসনে একাধিক ডেটা অবজেক্ট রয়েছে। উদাহরণস্বরূপ একাধিকবারplayerId হাজির । ইউনিটি এর অ্যারে সমর্থন করে না কারণ এটি এখনও নতুন রয়েছে তবে আপনি অ্যারের সাথে কাজ করতে এই ব্যক্তির সাহায্যকারী শ্রেণিটি ব্যবহার করতে পারেন ।JsonUtilityJsonUtility

বলা একটি ক্লাস তৈরি করুন 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);

আউটপুট :

পোওয়াই

ইউজার 2


এটি সার্ভার থেকে যদি জসন অ্যারে হয় এবং আপনি এটি হাতে তৈরি করেন নি :

আপনাকে {"Items":প্রাপ্ত স্ট্রিংয়ের সামনে যুক্ত করতে }হবে তার শেষে এটি যুক্ত করতে হবে।

আমি এর জন্য একটি সাধারণ ফাংশন করেছি:

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

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

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

৩. শ্রেণি ছাড়াই জেসন স্ট্রিংটি ডিজায়ালাইজ করুন & সংখ্যার বৈশিষ্ট্য সহ জসনকে ডি-সিরিয়ালিং করুন

এটি এমন একটি জসন যা সংখ্যার বা সংখ্যার বৈশিষ্ট্য দিয়ে শুরু হয়।

উদাহরণ স্বরূপ:

{ 
"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ইউনিটির উইকি থেকে ডাউনলোড করুন ।

ইউএসডি এর "15 মি" সম্পত্তি পেতে:

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

আইএসকে "15 মি" সম্পত্তি পেতে:

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

এনজেডডির "15 মি" সম্পত্তি পেতে:

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

সংখ্যার অঙ্কের সাথে শুরু না হওয়া বাকি জসন বৈশিষ্ট্যগুলি ইউনিটির জসন ইউটিলিটি পরিচালনা করতে পারে।


4. ট্রাবলশূটিং জসন ইউটিলিটি:

সিরিয়াল করার সময় সমস্যা JsonUtility.ToJson?

খালি স্ট্রিং পাচ্ছেন নাকি " {}" দিয়ে JsonUtility.ToJson?

। ক্লাসটি কোনও অ্যারে না রয়েছে তা নিশ্চিত করুন। যদি তা হয় তবে এর JsonHelper.ToJsonপরিবর্তে উপরের সহায়ক শ্রেণিটি ব্যবহার করুন JsonUtility.ToJson

[Serializable]আপনি যে শ্রেণীরিকরণ করছেন তার শীর্ষে যুক্ত করুন ।

। শ্রেণি থেকে সম্পত্তি সরান। উদাহরণস্বরূপ, চলকটিতে, public string playerId { get; set; } সরান { get; set; } । Ityক্য এটি সিরিয়াল করতে পারে না।

যখন ডিসরিয়ালাইজ হচ্ছে তখন সমস্যা JsonUtility.FromJson?

। যদি আপনি পান তবে Nullনিশ্চিত হয়ে নিন যে জসন কোনও জসন অ্যারে নয়। যদি তা হয় তবে এর JsonHelper.FromJsonপরিবর্তে উপরের সহায়ক শ্রেণিটি ব্যবহার করুন JsonUtility.FromJson

। যদি আপনি NullReferenceExceptionডিসরিয়ালাইজ [Serializable]করার সময় পান তবে ক্লাসের শীর্ষে যুক্ত করুন ।

সি । অন্য কোনও সমস্যা, আপনার জসন বৈধ কিনা তা যাচাই করুন। এখানে এই সাইটে যান এবং জসন পেস্ট করুন। এটি জাসন বৈধ কিনা তা আপনাকে দেখাতে হবে। এটি জাসনের সাথে যথাযথ শ্রেণি তৈরি করা উচিত। কেবল প্রতিটি ভেরিয়েবল থেকে অপসারণ { get; set; } এবং প্রতিটি [Serializable]উত্পন্ন উত্পন্ন শ্রেণীর শীর্ষে যুক্ত করার বিষয়টি নিশ্চিত করুন ।


নিউটনসফট.জসন:

যদি কোনও কারণে নিউটনসফট.জসন ব্যবহার করা আবশ্যক তবে এখানে ইউনিটির জন্য কাঁটাযুক্ত সংস্করণটি দেখুন । নোট করুন যে নির্দিষ্ট বৈশিষ্ট্য ব্যবহার করা থাকলে আপনি ক্রাশের অভিজ্ঞতা পেতে পারেন। সাবধান হও.


আপনার প্রশ্নের উত্তর দিতে :

আপনার মূল ডেটা হ'ল

 [{"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"}]}

করতে ধারাবাহিকভাবে একাধিক যেমন পিএইচপি থেকে ডেটা অ্যারে , আপনি এখন কি করতে পারেন

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অ্যাক্সেস করার আগে আপনি দৈর্ঘ্যটি পরীক্ষা করতে ব্যবহার করতে পারেন ।

দ্রষ্টব্য: ক্লাস থেকে সরান । আপনার যদি থাকে , এটি কাজ করবে না। Asক্য শ্রেণীর সদস্যদের সাথে কাজ করে না যা সম্পত্তি হিসাবে সংজ্ঞায়িত হয় ।{ get; set; }player{ get; set; }JsonUtility


আমি mysqlপিএইচপি ব্যবহার করে একটি ক্যোয়ারির সারিগুলির একটি অ্যারে ফিরিয়ে দিচ্ছি json_encode($row)। সুতরাং প্রতিক্রিয়াটিতে ফর্ম্যাটটিতে একাধিক জেএসএনওবজেক্ট রয়েছে [{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]। আমি জসন ইউটিলিটি চেষ্টা করেছি, তবে আমি বস্তুগুলি ডিসরিয়ালাইজ করতে এবং স্বতন্ত্র জসন বস্তুগুলি পেতে পারি না। আপনি যদি আমাকে এটি সাহায্য করতে পারেন।
dil33 বিকাল

4
আমি উপরে পোস্ট করা কোডটি দেখুন। এটি আপনাকে এটি করার তিনটি উপায় দেখায় JsonUtility.FromJson। আমি আপনাকে ক্লাস { get; set; }থেকে অপসারণ করতে বলতে ভুলে গেছি player। আপনার যদি হয় { get; set; }, এটি কাজ করবে না। আপনার playerক্লাসটি তুলনা করুন আমি উপরে পোস্ট করা সাথে এবং আপনি বুঝতে হবে আমি কি বলছি।
প্রোগ্রামার

4
সমস্যা নেই. ইউনিটি যখন অ্যারের জন্য সমর্থন যোগ করবে তখন এটি সম্পাদনা করব (যা খুব শীঘ্রই) সুতরাং আপনার আর সেই সহায়ক সহায়ক শ্রেণীর দরকার পড়বে না।
প্রোগ্রামার

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

4
ব্যবহার JsonHelper। এটা ভাল. আপনি যদি এটি দিয়ে জসন তৈরি করেন, আপনি অতিরিক্ত পদক্ষেপ ছাড়াই এটিতে জসনও পড়তে পারেন। কেবলমাত্র আপনি অতিরিক্ত স্টাফ করার প্রয়োজন হতে পারে যদি আপনি সার্ভার থেকে জসন অ্যারে গ্রহণ করেন এবং সমাধানটিতে এটি অন্তর্ভুক্ত থাকে তবে আমার উত্তরটি রয়েছে। অন্য উপায় ছাড়াই JsonHelperক্লাসটিকে অন্য একটি ক্লাসে রেখে তারপরে এটিকে তৈরি করা হয় List। এটি বেশিরভাগ মানুষের জন্য কাজ করে চলেছে। যদি আপনি খুঁজছেন একটি উপায় লোড গেম ডেটা সংরক্ষণ করুন এবং করার জন্য কি তবুও ভেবে দেখবে এইআপনি কোডের একটি লাইনের সাহায্যে লোড এবং সংরক্ষণ করুন।
প্রোগ্রামার

17

ধরুন আপনি এর মতো একটি জেএসএন পেয়েছেন

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

উপরের জেএসএনকে একতার সাথে বিশ্লেষণ করতে, আপনি এটির মতো জেএসওএন মডেল তৈরি করতে পারেন।

[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 unityক্যতে ব্যবহৃত great দুর্দান্ত কাজ করে। : মতো বিন্যাস ডেটা অ্যাক্সেস 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); }
Towerss

@ নরোত্তম গিয়াল, আপনার পদ্ধতিটি কিছু ক্ষেত্রে কাজ করছে না, নতুনদের জন্যও খুব কঠিন সমাধান, এই উত্তরটি আমার এই থ্রেডের লিঙ্কটিতে উল্লেখ করুন
জুনেদ খান মমিন

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

2

আপনাকে ক্লাসে যুক্ত [System.Serializable]করতে হবে, PlayerItemএটির মতো:

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

1

JSON ফাইল পড়তে, এই সাধারণ উদাহরণটি দেখুন refer

আপনার 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;
}

4
অ্যারে সম্পর্কে কি? এবং এই উত্তরটি কী যুক্ত করে যা 3 বছর আগে থেকে গৃহীত উত্তরটিতে ইতিমধ্যে মিলিত হয়নি ?
derHugo

@ হডার হুগো এতে একটি কল অন্তর্ভুক্ত রয়েছে File.ReadAllTextযা আমি মনে করি সহায়ক এবং অন্য কোনও উত্তর উল্লেখ
করেনি

@ রুজিহম ঠিকঠাক কারণেই অন্য কোনও উত্তর উল্লেখ না করার কারণ এই প্রশ্নের ব্যাপ্তিটি কীভাবে (ডি) সিরিয়ালাইজ করা যায় .. ফাইলআইও কীভাবে করবেন না;)
derHugo

0

ছাঁটাই না []এবং আপনি ভাল করা উচিত। []একটি JSON অ্যারে সনাক্ত করুন যা আপনাকে ঠিক তার উপাদানগুলির পুনরাবৃত্তি করতে সক্ষম হতে হবে।


0

@ ম্যাক্সিমিলিয়ানগারহার্ডের মতো বলেছিলেন, মিনিজসনের সঠিকভাবে ডিসরিয়ালাইজ করার ক্ষমতা নেই। আমি জসনএফএক্স ব্যবহার করেছি এবং একটি কবজির মতো কাজ করি। সঙ্গে কাজ করে[]

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

আপনি 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);

    }
}

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

আর একটি সমাধান জসনহেল্পার ব্যবহার করছে

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, "জেড": 0.0}]}


0

Ityক্য <= 2019

নরোত্তম গিয়ালের একটি জেসন বস্তুতে অ্যারে মোড়ানো এবং তারপরে একটি স্ট্রাক্টে deserialization করার ভাল ধারণা ছিল। নীচে প্রতিটি ধরণের অ্যারেগুলির জন্য এটি সমাধানের জন্য জেনারিক্স ব্যবহার করে, প্রতিবার একটি নতুন ক্লাস তৈরির বিরোধী।

[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);

20ক্য 2020

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


4
আপনার প্রদত্ত লিঙ্কটি মারা গেছে, তবে এই লিঙ্কটি সম্পর্কিত নিবন্ধ হিসাবে তালিকাভুক্ত করা হয়েছে: নথি সহ ডকস.উইনটিটি 3 ডটকম / প্যাকেজস / কম.িউনি.নাগেট.নেউটসনফটস / জসন @ ২.০ / : "এটি অভ্যন্তরীণ ityক্য বিকাশের উদ্দেশ্যে প্যাকেজ প্রকল্পগুলি এবং এই জাতীয় প্যাকেজটি সমর্থিত নয় your আপনার নিজের ঝুঁকিতে ব্যবহার করুন। "
R2RT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.