जोंजे के साथ मक्खी पर JSON बनाना


94

मेरे कुछ यूनिट परीक्षणों के लिए, मैं विशेष JSON मान (इस मामले में रिकॉर्ड एल्बम) बनाने की क्षमता चाहता हूं, जिसका उपयोग परीक्षण के तहत सिस्टम के लिए इनपुट के रूप में किया जा सकता है।

मेरे पास निम्नलिखित कोड हैं:

var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");

यह ठीक काम करता है, लेकिन मुझे वास्तव में "मैजिक स्ट्रिंग" सिंटैक्स पसंद नहीं है और यह इस तरह जावास्क्रिप्ट में विस्तार-संपत्ति सिंटैक्स के करीब कुछ पसंद करेगा:

jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

5
आपको कलाकार / एल्बम चयन के लिए दोहरे अंक मिलने चाहिए!
20

जवाबों:


141

खैर, कैसे के बारे में:

dynamic jsonObject = new JObject();
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against the world";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

3
उत्तम! वास्तव में मैं क्या देख रहा था, पूरी तरह से भूल गया dynamic
कार्ल एंडरसन

जब मैं आपका कोड चलाने का प्रयास करता हूं तो मुझे 'Newtonsoft.Json.Linq.JObject' की 'तारीख' त्रुटि की परिभाषा नहीं मिलती है। जिस तरह से मैं यह काम कर सकता है वह पहली पंक्ति को बदल रहा है: dynamic jsonExpando = new ExpandoObject();और अपने कोड के बाद एक पंक्ति जोड़ें:JObject jsonObject = JObject.FromObject(jsonExpando);
बोर्नटकोड

3
यदि आप अपने JSON ऑब्जेक्ट में एक सूची <> जोड़ना चाहते हैं, तो आपको कुछ ऐसा करने की आवश्यकता है jsonObject.list = JToken.FromObject(mylist);
स्टीव स्मिथ

यदि आप विशेष वर्ण उदा। क्रिएट-ईयर है, तो आप इंडेक्स और प्रॉपर्टी नोटेशन के संयोजन का उपयोग कर सकते हैं। " "] = 1995; jsonObject.Artist =" 2Pac ";
PAS

71

आप JObject.Parseऑपरेशन का उपयोग कर सकते हैं और बस सिंगल कोट सीमांकित JSON टेक्स्ट की आपूर्ति कर सकते हैं ।

JObject  o = JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}");

यह वास्तव में JSON होने का अच्छा लाभ है और इसलिए यह JSON के रूप में पढ़ता है।

या आपके पास परीक्षण डेटा है जो गतिशील है आप JObject.FromObjectऑपरेशन का उपयोग कर सकते हैं और इनलाइन ऑब्जेक्ट की आपूर्ति कर सकते हैं ।

JObject o = JObject.FromObject(new
{
    channel = new
    {
        title = "James Newton-King",
        link = "http://james.newtonking.com",
        description = "James Newton-King's blog.",
        item =
            from p in posts
            orderby p.Title
            select new
            {
                title = p.Title,
                description = p.Description,
                link = p.Link,
                category = p.Categories
            }
    }
});

क्रमांकन के लिए Json.net प्रलेखन


10
JObject.FromObject को सही उत्तर के रूप में चिह्नित किया जाना चाहिए। धन्यवाद।
थॉमस

1
मुझे लगता है कि JObject.FromObjectयदि विशेष वर्ण जैसे गुण हैं तो मैं काम नहीं करूंगा -
जतिन सांघवी

39

जब आपके पास JSON गुण हैं जो C # चर नामों जैसे मान्य नहीं हैं dynamic, तो न तो , न ही JObject.FromObjectसमाधान काम करता है "@odata.etag"। मैं अपने परीक्षण मामलों में अनुक्रमणिका आरंभिक सिंटैक्स पसंद करता हूं:

JObject jsonObject = new JObject
{
    ["Date"] = DateTime.Now,
    ["Album"] = "Me Against The World",
    ["Year"] = 1995,
    ["Artist"] = "2Pac"
};

इनिशियलाइज़िंग के JObjectलिए और गुणों को जोड़ने के लिए सांकेतिक शब्दों के अलग-अलग सेट होने से इंडेक्स इनिशियलाइज़र को क्लासिक ऑब्जेक्ट इनिशियलाइज़र की तुलना में अधिक पठनीय बना दिया जाता है, विशेष रूप से नीचे के रूप में यौगिक JSON ऑब्जेक्ट्स के मामले में:

JObject jsonObject = new JObject
{
    ["Date"] = DateTime.Now,
    ["Album"] = "Me Against The World",
    ["Year"] = 1995,
    ["Artist"] = new JObject
    {
        ["Name"] = "2Pac",
        ["Age"] = 28
    }
};

ऑब्जेक्ट इनिशियलाइज़र सिंटैक्स के साथ, उपरोक्त इनिशियलाइज़ेशन होगा:

JObject jsonObject = new JObject
{
    { "Date", DateTime.Now },
    { "Album", "Me Against The World" },
    { "Year", 1995 }, 
    { "Artist", new JObject
        {
            { "Name", "2Pac" },
            { "Age", 28 }
        }
    }
};

2
अंतिम एक निश्चित रूप से c # में json लिखने के लिए सबसे अच्छा वाक्यविन्यास है।
एंथोनी ब्रेनेलीयर

देखें stackoverflow.com/questions/51015036/… कैसे संग्रह के साथ भी ऐसा करने के लिए
kofifus

30

ऐसे कुछ वातावरण हैं जहाँ आप डायनामिक (जैसे Xamarin.iOS) या ऐसे मामलों में उपयोग नहीं कर सकते हैं जहाँ आप पिछले वैध उत्तर के विकल्प की तलाश करते हैं।

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

using Newtonsoft.Json.Linq;

JObject jsonObject =
     new JObject(
             new JProperty("Date", DateTime.Now),
             new JProperty("Album", "Me Against The World"),
             new JProperty("Year", "James 2Pac-King's blog."),
             new JProperty("Artist", "2Pac")
         )

यहाँ और अधिक प्रलेखन: http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm


2

गुण से newtonsoft JObject बनाने का सरल तरीका।

यह एक नमूना उपयोगकर्ता गुण है

public class User
{
    public string Name;
    public string MobileNo;
    public string Address;
}

और मैं चाहता हूँ कि यह संपत्ति newtonsoft JObject में है:

JObject obj = JObject.FromObject(new User()
{
    Name = "Manjunath",
    MobileNo = "9876543210",
    Address = "Mumbai, Maharashtra, India",
});

आउटपुट इस तरह होगा:

{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}

2

जल्दी या बाद में आपके पास विशेष चरित्र वाली संपत्ति होगी। आप या तो सूचकांक या सूचकांक और संपत्ति के संयोजन का उपयोग कर सकते हैं।

dynamic jsonObject = new JObject();
jsonObject["Create-Date"] = DateTime.Now; //<-Index use
jsonObject.Album = "Me Against the world"; //<- Property use
jsonObject["Create-Year"] = 1995; //<-Index use
jsonObject.Artist = "2Pac"; //<-Property use

यह प्रश्न का उत्तर कैसे देता है?
Enigmativity

@ ऊर्जा, मैं जो बिंदु बना रहा हूं, आप एक साथ सूचकांक अंकन और संपत्ति संकेतन का उपयोग कर सकते हैं। यानी ओब्ज [x] = X1; obj.y = y1 का उपयोग एक ही कोड में किया जा सकता है। डायनामिक कीवर्ड और इंडेक्स नोटेशन का संयोजन सवालों के जवाब देता है। किसी अन्य उत्तर में इसका उल्लेख नहीं है। संभवतः, यह एक उत्तर की तुलना में टिप्पणी होनी चाहिए।
PAS

मैं सिर्फ यह सोचता हूं कि सवाल जादू के तार का उपयोग नहीं करने के बारे में है, लेकिन यह जवाब उसे दे रहा है।
Enigmativity

@Enigmativity, डायनामिक कीवर्ड कंपाइलर को बेवकूफ बनाता है। तो यह मनमाने तार से अलग नहीं है। डायनामिक प्रकार की वस्तु दृढ़ता से टाइप नहीं की जाती है। यह सिंटैक्टिक शुगर है। यदि अंतर्निहित ऑब्जेक्ट में संपत्ति नहीं है, तो यह रनटाइम विफल हो जाएगा। लेकिन अगर आप संपत्ति के नाम में विशेष अक्षर जैसे 99BottlesOfBeer, नाम स्थान, इट्स-ऑल-ओवर शामिल हैं, तो आप गुणों का उपयोग नहीं कर सकते। तो उन मामलों में, हम अनुक्रमित गुणों का उपयोग कर सकते हैं। अन्य उत्तर आपको यह सोचते हैं कि यह एक या अन्य है, लेकिन आप संपत्ति और सूचकांक को मिला सकते हैं और मिलान कर सकते हैं।
पीएएस

-3

आप न्यूटनसॉफ्ट लाइब्रेरी का उपयोग कर सकते हैं और इसे निम्नानुसार उपयोग कर सकते हैं

using Newtonsoft.Json;



public class jb
{
     public DateTime Date { set; get; }
     public string Artist { set; get; }
     public int Year { set; get; }
     public string album { set; get; }

}
var jsonObject = new jb();

jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";


System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
         new System.Web.Script.Serialization.JavaScriptSerializer();

string sJSON = oSerializer.Serialize(jsonObject );

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