簡體   English   中英

用另一個數組C#的元素替換json數組元素

[英]Replace json array elements with elements of another array c#

我有兩個json字符串。

string days = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']";
string data= "[[0,0,0],[2,1,0],[0,2,0],[3,3,0],[0,6,0],[0,7,0],[5,8,0],[0,9,1],[6,10,3],[0,11,5],[0,12,4],[4,13,7],[0,14,1]]";

我想這樣轉換json數據。

對於所有數組,例如[0,0,0]

a)如果最后一個值為0,則從數據中刪除此數組

b)用天數組中的第一個值替換第一個值,例如.. [3,13,7]變為[“ Wednesday”,13,7]

我從這個開始。

JArray daysarr = JArray.Parse(days);
JArray myarr = JArray.Parse(data);
foreach (var myobj in myarr)
{
    // what do I do here????
}  

真誠的感謝您的幫助。

謝謝

那么這個解決方案呢:

var js = new JavaScriptSerializer();
string days = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']";
string data = "[[0,0,0],[2,1,0],[0,2,0],[3,3,0],[0,6,0],[0,7,0],[5,8,0],[0,9,1],[6,10,3],[0,11,5],[0,12,4],[4,13,7],[0,14,1]]";

var Days = js.Deserialize<List<string>>(days);
var Data = js.Deserialize<List<List<int>>>(data);

var answer = js.Serialize(Data.Where(x => x.Last() != 0).ToList().Select(x => {
    var list = new List<object> { Days[x.First()] };
    list.AddRange(x.Skip(1).Select(y => (object)y).ToList());
    return list;
}).ToList());
 string days = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']";
        string data = "[[0,0,0],[2,1,0],[0,2,0],[3,3,0],[0,6,0],[0,7,0],[5,8,0],[0,9,1],[6,10,3],[0,11,5],[0,12,4],[4,13,7],[0,14,1]]";

        JArray daysarr = JArray.Parse(days);
        JArray myarr = JArray.Parse(data);

        JArray result = new JArray();


        foreach (var myobj in myarr)
        {
            if (myobj.Last.Value<int>() != 0)
            {
                var t = new object[3];
                t[0] = daysarr[myobj.First.Value<int>()];
                t[1] = myobj[1];
                t[2] = myobj[2];

                result.Add(t);
            }
        }

foreach循環是只讀的(您不能修改正在迭代的集合,例如刪除項目等); 您可以使用for循環,而是需要一個可以存儲字符串和整數的新容器,例如List<Tuple<object, int, int>>

您還需要一個if語句:

JArray daysarr = JArray.Parse(days);
JArray myarr = JArray.Parse(data);

var result = new List<Tuple<object, int, int>>();

foreach(myobj in myarr)
{
    if(myobj[2] != 0)
    {
        var newValue = new Tuple<object, int, int>(daysarr[myobj[0]], myobj[1], myobj[2]);
        result.Add(newValue);
    }
} 

您可以在下面的代碼中嘗試一下嗎:

string days = "['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']";
string data = "[[0,0,0],[2,1,0],[0,2,0],[3,3,0],[0,6,0],[0,7,0],[5,8,0],[0,9,1],[6,10,3],[0,11,5],[0,12,4],[4,13,7],[0,14,1]]";

JArray daysarr = JArray.Parse(days);
JArray myarr = JArray.Parse(data);
// a) If the last value is 0 remove this array from data
// b) Replace the first value with the first value in days array eg ..[3,13,7] becomes ["Wednesday",13,7]
// This result array we used for storing all valid data which follow the two rules as define above comment.
JArray result = new JArray();
foreach (var myobj in myarr)
{
    if (myobj.Count() == 3)
    {
        var firstValue = Convert.ToInt32(myobj[0]);
        var secondValue = Convert.ToInt32(myobj[1]);
        var thirdValue = Convert.ToInt32(myobj[2]);

        // Here we check last value of current array
        if (thirdValue != 0)
        {
            string day = Convert.ToString(daysarr[firstValue]);

            myobj[0] = day;

            result.Add(myobj);

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM