अब तक क्या किया गया है?

मैं रिकॉर्ड की संख्या को 3 बैचों में विभाजित करने और प्रदर्शन को बढ़ाने के लिए समानांतर में उन्हें संसाधित करने पर काम कर रहा हूं। हालांकि, समानांतर में बैचों को संसाधित करने के बाद मैं एक चर में संसाधित रिकॉर्ड के परिणाम (JSON स्ट्रिंग) को भी सहेजना चाहता हूं।

जैसा कि आप नीचे देख सकते हैं, मैं पहले वेरिएबल को string के List के रूप में प्रारंभ करता हूं और फिर foreach लूप चलाता हूं जो नीचे बताए अनुसार संसाधित परिणाम को बचाता है।

List<string> responseOutcome = new List<string>();

Parallel.ForEach(recordBatches, batch => { 
    responseOutcome.Add(response1.Content);
});

सूची responseOutcome में परिणाम इस प्रकार आता है:

प्रतिक्रिया परिणाम [0]

[
  {
    "Name": "Sample1",
    "ID": "123"
  },
  {
    "Name": "Sample2",
    "ID": "394"
  }
],

प्रतिक्रिया परिणाम[1]

[
  {
    "Name": "Sample5",
    "ID": "384"
  },
  {
    "Name": "Sample6",
    "ID": "495"
  }
],

प्रतिक्रिया परिणाम[2]

[
  {
    "Name": "Sample3",
    "ID": "473"
  },
  {
    "Name": "Sample4",
    "ID": "264"
  }
]

मैं क्या हासिल करना चाहूंगा? अब मैं responseOutcome का मान लेना चाहता हूं जो JSON स्ट्रिंग की कई सरणियाँ हैं और उन्हें एक बड़े JSON स्ट्रिंग में मिला दें।

अंतिम आउटपुट

    [
      {
        "Name": "Sample1",
        "ID": "123"
      },
      {
        "Name": "Sample2",
        "ID": "394"
      },
      {
        "Name": "Sample5",
        "ID": "384"
      },
      {
        "Name": "Sample6",
        "ID": "495"
      },
      {
        "Name": "Sample3",
        "ID": "473"
      },
      {
        "Name": "Sample4",
        "ID": "264"
      }
    ]

मैंने ऐसे ही कई मामलों पर गौर किया लेकिन वे लगभग एक जैसे नहीं थे। पसंद:

मैं एकाधिक जेसन ऑब्जेक्ट्स को कैसे मर्ज करूं?

मैं Newtonsoft JSON.Net में दो JObjects से दो सरणियों को कैसे जोड़ूँ?

कोई मदद/मार्गदर्शन बहुत अच्छा होगा !!

0
colourtheweb 26 नवम्बर 2020, 00:56

2 जवाब

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

Newtonsoft का उपयोग करके, आप अपनी प्रत्येक प्रतिक्रिया से एक JArray बना सकते हैं। फिर आप linq की SelectMany विधि का उपयोग करके पदानुक्रम को समतल कर सकते हैं और ऑब्जेक्ट को फिर से क्रमबद्ध कर सकते हैं।

ये कोशिश करें:

var obj = responses.Select(r => JArray.Parse(r.Trim(','))).SelectMany(token => token);
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
1
Connell.O'Donnell 26 नवम्बर 2020, 02:43

ऐसा करने के लिए शायद अधिक कुशल तरीके हैं यदि आप शुद्ध स्ट्रिंग मैनिपुलेशन करना चाहते हैं, लेकिन न्यूटनसॉफ्ट का उपयोग करके, मैं deserialize, विलय और फिर पुन: क्रमबद्ध करूंगा।

एक छोटा POCO मॉडल बनाएं:

public class ResponseOutcomeModel
{
    public string ID { get; set; }
    public string Name { get; set; }
}

फिर इस मॉडल के लिए deserialize, एक सूची के रूप में JSON में विलय और पुन: क्रमबद्ध करें।

var outcomeList = new List<ResponseOutcomeModel>();
foreach (var i in responseOutcome)
{
   outcomeList.AddRange(JsonConvert.DeserializeObject<List<ResponseOutcomeModel>>(i.Trim().TrimEnd(',')));
}

var finalJson = JsonConvert.SerializeObject(outcomeList);

ध्यान दें, टाइम/ट्रिमएंड का उपयोग तब किया जाता है जब आपके उदाहरण में अनुगामी अल्पविराम वास्तव में आपकी प्रतिक्रिया आउटकम सरणी (सरणी में प्रत्येक तत्व के अंत में) में होते हैं। यदि आप वहां अल्पविराम छोड़ते हैं तो DeserializeObject पर कॉल शिकायत करेगा।

0
Bryan Lewis 26 नवम्बर 2020, 01:41