2013-12-17 3 views
5

को परेशान किए बिना एक जेसन फ़ाइल कैसे संलग्न करें मैं डेटा को जोड़ने/पुनर्प्राप्त करने के लिए फ़ाइल पर काम कर रहा हूं। डेटा प्रारूप JSON है। मैं एक नौसिखिया हूँ। मैं डेटा को क्रमबद्ध और deserialize करने के लिए JSON.NET का उपयोग कर रहा हूं। इस json प्रारूपफ़ॉर्मेटिंग

{ 
    "EmpId": 1, 
    "Name": "Kaushik", 
    "Designation": ".net Developer", 
    "JoiningDate": "09/23/2013", 
    "Skill": [ 
    { 
     "Id": 1, 
     "SkillName": "C#" 
    }, 
    { 
     "Id": 2, 
     "SkillName": "PHP" 
    }, 
    { 
     "Id": 3, 
     "SkillName": "java" 
    } 
    ] 
}

यह JSON प्रारूप मैं पर काम कर रहा हूँ है। समस्या

  1. मैं फ़ाइल डेटा संलग्न करने के लिए तो मैं यह करने के लिए अधिक json जोड़ सकते हैं Wint, इस मैं वहाँ पहले से ही कुछ डेटा या नहीं जांच करने की आवश्यकता के लिए के विवरण?
  2. और दूसरा मैं डेटा के साथ जोड़ दिया प्रपत्र json फ़ाइल में डेटा संलग्न करने के लिए इस
[ 
    { 
     "EmpId": 1, 
     "Name": "Kaushik", 
     "Designation": ".net Developer", 
     "JoiningDate": "09/23/2013", 
     "Skill": [ 
      { 
       "Id": 1, 
       "SkillName": "C#" 
      }, 
      { 
       "Id": 2, 
       "SkillName": "PHP" 
      }, 
      { 
       "Id": 3, 
       "SkillName": "java" 
      } 
     ] 
    }, 
    { 
     "EmpId": 1, 
     "Name": "Kaushik", 
     "Designation": ".net Developer", 
     "JoiningDate": "09/23/2013", 
     "Skill": [ 
      { 
       "Id": 1, 
       "SkillName": "C#" 
      }, 
      { 
       "Id": 2, 
       "SkillName": "PHP" 
      }, 
      { 
       "Id": 3, 
       "SkillName": "java" 
      } 
     ] 
    } ]

तो मुख्य समस्या की तरह दिखाई देगा चाहते हैं कि मैं फ़ाइल संलग्न करने के लिए सटीक तर्क नहीं मिल रहा है है।

मैं चार से फ़ाइल चार पढ़ रहा हूँ

 

    int count = 0; 
       EmployeeDetail employee = new EmployeeDetail 
       { 

        EmpId = ++count, 
        Name = formCollection["Name"], 
        Designation = formCollection["Designation"], 
        JoiningDate = formCollection["JoiningDate"], 
        Skill = new List 
        { 
         new Skills(){Id = 1, SkillName = "C#"}, 
         new Skills(){Id = 2, SkillName = "PHP"}, 
         new Skills(){Id = 3, SkillName = "java"} 
        } 

       }; 

       string json = JsonConvert.SerializeObject(employee,Formatting.Indented); 
       var dataFile = Server.MapPath("~/App_Data/json_data.json"); 
       //Reading the file 
       StreamReader reader = new StreamReader(dataFile); 
       int Tchar = 0; 
       char ch; 
       do 
       { 
        ch = (char)reader.Read(); 

        Response.Write(ch); 
        Tchar++; 
       } while (!reader.EndOfStream); 
       reader.Close(); 

       StreamWriter file = new StreamWriter(dataFile,append:true); 

       file.WriteLine(json); 

       file.Close(); 

इसलिए किसी भी मदद की सराहना की निम्नलिखित के रूप में धन्यवाद

उत्तर

10

आपका सबसे अच्छा और सबसे विश्वसनीय दृष्टिकोण फ़ाइल में शामिल नहीं होना होगा, बल्कि इसके बजाय, संपूर्ण JSON फ़ाइल को पढ़ें और किसी ऑब्जेक्ट को डी-सीरियलाइज करें, ऑब्जेक्ट संग्रह में संलग्न करें और फिर आउटपुट को JSON फ़ाइल में क्रमबद्ध करें ।

मैं (तदनुसार रास्तों परिवर्तन और वर्ग) आप के लिए यह नमूना बनाया:

var filePath = @"C:\Users\grahamo\Documents\Visual Studio 2013\Projects\WebApplication1\WebApplication1\bin\path.json"; 
// Read existing json data 
var jsonData = System.IO.File.ReadAllText(filePath); 
// De-serialize to object or create new list 
var employeeList = JsonConvert.DeserializeObject<List<EmployeeDetail>>(jsonData) 
         ?? new List<EmployeeDetail>(); 

// Add any new employees 
employeeList.Add(new EmployeeDetail() 
{ 
    Name = "Test Person 1" 
}); 
employeeList.Add(new EmployeeDetail() 
{ 
    Name = "Test Person 2" 
}); 

// Update json data string 
jsonData = JsonConvert.SerializeObject(employeeList); 
System.IO.File.WriteAllText(filePath, jsonData); 

के रूप में आप नए हैं, ऊपर से वोट या जवाब के रूप में टिक अगर मैं तुम बाहर मदद की है।

+0

आपकी मदद के लिए धन्यवाद। '??' चिह्न का अर्थ क्या है? और दूसरी बार फ़ाइल सामग्री क्या होगी? यह दोनों जेसन की सरणी होगी या नहीं ?? बीकॉज़ मुझे आपका समाधान बिल्कुल नहीं मिल रहा है –

+0

'?? 'का अर्थ है कि DeserializeObject फ़ंक्शन शून्य देता है (यानी हो सकता है कि फ़ाइल अभी तक नहीं बनाई गई है, या खाली है) तो बस कर्मचारी की एक नई सूची बनाएं। दूसरी बार फ़ाइल सामग्री 4 कर्मचारियों को बचाएगी। फिर 6 कर्मचारी इतने आगे ...आप शायद हर बार एक कर्मचारी जोड़ना चाहते हैं, तो बस इसे बदलें। – GONeale

+0

आपको बहुत धन्यवाद –

1

FileStream पर एक CopyTo विधि नहीं है। तो आपको प्रतिक्रिया स्ट्रीम में चार-दर-चार पढ़ने, फ़ाइल स्ट्रीम खोलने और CopyTo पढ़ने की आवश्यकता नहीं है।

इसके अलावा मैं आपको पहले फ़ाइल को पुन: व्यवस्थित करने की सलाह दूंगा (जेसन.नेट का उपयोग करके, आप कंक्रीट प्रकारों के साथ गड़बड़ी से बचने के लिए बस dynamic का उपयोग कर सकते हैं), और चूंकि यह ऑब्जेक्ट्स की एक सरणी है, फिर इस सरणी में अपनी नई वस्तु जोड़ें और इसे वापस बचाओ।

प्रारूप पूरी तरह से सही होगा क्योंकि आप पूरी फ़ाइल को फिर से सहेजते हैं।

पीएस आप शायद संलग्न नहीं कर पाएंगे क्योंकि फ़ाइल में क्रमबद्ध JSON ऑब्जेक्ट "बंद" है (आपके पास } ] है), इसलिए टेक्स्ट संलग्न करना काम नहीं करेगा।

+0

मुझे फ़ाइल को डाटाबेस के रूप में बनाए रखना है, हर बार कोई उपयोगकर्ता उस रिकॉर्ड को दर्ज करता है जिसे मैं सहेजता हूं और मुख्य होम पेज पर प्रदर्शित करता हूं। तो मुझे डेटा जोड़ने की जरूरत है। क्या आप कृपया अपने उत्तर को और अधिक विस्तृत कर सकते हैं, मैं सी # के लिए नया हूं इसलिए मुझे यह नहीं मिल रहा है कि आपका क्या मतलब है? –

संबंधित मुद्दे