Een array maken uit een json

Status
Niet open voor verdere reacties.

sunlight22

Gebruiker
Lid geworden
11 dec 2011
Berichten
6
Beste mensen,

Al enige tijd ben ik op zoek naar een manier om een json welke ik krijg uit een arduino om te zetten naar eenn array om status van iedere uitgang uit te lezen.

Op dit moment krijg ik netjes alle waardes door alleen kan ik ze niet omzetten naar een array en uitlezen.

Kan iemand mij in de juiste richting duwen?

Mijn code welke de status ophaalt ui de arduino is:

Code:
void initializeUdpReceive()

        {
            receivingUdpClient = new UdpClient(6000);
            try
            {
                receivingUdpClient.BeginReceive(new AsyncCallback(receive), null);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.StackTrace);
                Console.WriteLine(e.ToString());
            }
        }
        



        private void receive(IAsyncResult result)
        {
            receivingIpEndPoint = new IPEndPoint(IPAddress.Any, 6000);
            Byte[] receiveBytes = receivingUdpClient.EndReceive(result, ref receivingIpEndPoint);
            string returnData = Encoding.ASCII.GetString(receiveBytes);
            Console.WriteLine("This is the message you received " +
                                                         returnData.ToString());
            Console.WriteLine("This message was sent from " +
                                        receivingIpEndPoint.Address.ToString() +
                                        " on their port number " +
                                        receivingIpEndPoint.Port.ToString());
            receivingUdpClient.BeginReceive(new AsyncCallback(receive), null);

            

            
    }

Deze geeft onderstaande json als output.



{"data":[{"type":"D","nr":10,"val":1},{"type":"D","nr":11,"val":0},{"type":"D","nr":12,"val":0},{"type":"D","nr":13,"val":0},{"type":"D","nr":14,"val":0},{"type":"D","nr":15,"val":0},{"type":"D","nr":16,"val":0},{"type":"D","nr":17,"val":1},{"type":"D","nr":18,"val":1},{"type":"D","nr":19,"val":1},{"type":"D","nr":20,"val":1},{"type":"D","nr":21,"val":1},{"type":"D","nr":22,"val":1},{"type":"D","nr":23,"val":1},{"type":"D","nr":24,"val":1},{"type":"D","nr":25,"val":1},{"type":"D","nr":26,"val":1},{"type":"D","nr":27,"val":0},{"type":"D","nr":28,"val":1},{"type":"D","nr":29,"val":0},{"type":"D","nr":30,"val":1},{"type":"D","nr":31,"val":0},{"type":"D","nr":32,"val":1},{"type":"D","nr":33,"val":1},{"type":"D","nr":34,"val":0},{"type":"D","nr":35,"val":0},{"type":"D","nr":36,"val":1},{"type":"D","nr":37,"val":1},{"type":"D","nr":38,"val":1},{"type":"D","nr":39,"val":1},{"type":"D","nr":40,"val":0},{"type":"D","nr":41,"val":0},{"type":"D","nr":42,"val":0},{"type":"D","nr":43,"val":0},{"type":"D","nr":44,"val":0},{"type":"D","nr":45,"val":0},{"type":"D","nr":46,"val":0},{"type":"D","nr":47,"val":0},{"type":"D","nr":48,"val":0},{"type":"D","nr":49,"val":0},{"nr":50,"val":13.50},{"nr":51,"val":-127.00},{"nr":52,"val":13.00},{"nr":53,"val":13.50},{"nr":54,"val":0},{"nr":55,"val":0.00},{"nr":56,"val":0.00},{"nr":57,"val":0.00},{"nr":58,"val":0.00},{"nr":59,"val":0}]}
 
Wat heb je al gedaan? heb je al gespeeld met:

Code:
JsonConvert.DeserializeObject

Of zit je probleem ergens anders?
 
Wat heb je al gedaan? heb je al gespeeld met:

Code:
JsonConvert.DeserializeObject

Of zit je probleem ergens anders?


Ja het meeste daarmee gespeeld maar ik krijg hier geen oplossing mee. Ligt aan mijn hoor, ik heb niet zoveel ervaring hiermee.
 
Overigens lijkt je voorbeeld bij nr 50 niet meer consistent te zijn daar valt "type:D" weg (is dat juist gedrag?).

wat wil je in je array hebben dan? zoiets?

10 , 1
11 , 0
12 , 0
13 , 0
14 , 0
15 , 0
16 , 0
17 , 1
 
Overigens lijkt je voorbeeld bij nr 50 niet meer consistent te zijn daar valt "type:D" weg (is dat juist gedrag?).

wat wil je in je array hebben dan? zoiets?

10 , 1
11 , 0
12 , 0
13 , 0
14 , 0
15 , 0
16 , 0
17 , 1


Hallo Wampier,

De code van de output is niet helemaal gekopieerd dus dat zal de oorzaak zijn.

Edit: dat zijn geen ingangen meer maar andere waardes dus daarom staat daar geen type meer bij

Uw voorbeeld is inderdaad wat mijn bedoeling is.
 
Laatst bewerkt:
Indien je er zeker van kan zijn dat je json ook werkelijk "clean" is, is het niet zo heel moeilijk. Echter, bovenstaande voorbeeld bevat heel veel errors. Als dat de werkelijke output is, is het heel moeilijk om met standaard code daar wat mee te beginnen.

gelukkig lijken het alleen extra spaties te zijn en daar kun je wel redelijk mee om gaan:

Code:
            string test = @"{""data"":[{""type"":""D"",""nr"":10,""val"":1},{""type"":""D"",""nr"":11,""val"":0},{""type"":""D"",""nr"":12,""val"":0},{""type"":""D"","" nr"":13,""val"":0},{""type"":""D"",""nr"":14,""val"":0},{""type"":""D"",""nr"":15,""val"":0},{""type"":""D"",""nr"":16,""val"": 0},{""type"":""D"",""nr"":17,""val"":1},{""type"":""D"",""nr"":18,""val"":1},{""type"":""D"",""nr"":19,""val"":1},{""type"":""D "",""nr"":20,""val"":1},{""type"":""D"",""nr"":21,""val"":1},{""type"":""D"",""nr"":22,""val"":1},{""type"":""D"",""nr"":23,""va l"":1},{""type"":""D"",""nr"":24,""val"":1},{""type"":""D"",""nr"":25,""val"":1},{""type"":""D"",""nr"":26,""val"":1},{""type"" :""D"",""nr"":27,""val"":0},{""type"":""D"",""nr"":28,""val"":1},{""type"":""D"",""nr"":29,""val"":0},{""type"":""D"",""nr"":30, ""val"":1},{""type"":""D"",""nr"":31,""val"":0},{""type"":""D"",""nr"":32,""val"":1},{""type"":""D"",""nr"":33,""val"":1},{""ty pe"":""D"",""nr"":34,""val"":0},{""type"":""D"",""nr"":35,""val"":0},{""type"":""D"",""nr"":36,""val"":1},{""type"":""D"",""nr"": 37,""val"":1},{""type"":""D"",""nr"":38,""val"":1},{""type"":""D"",""nr"":39,""val"":1},{""type"":""D"",""nr"":40,""val"":0},{ ""type"":""D"",""nr"":41,""val"":0},{""type"":""D"",""nr"":42,""val"":0},{""type"":""D"",""nr"":43,""val"":0},{""type"":""D"",""n r"":44,""val"":0},{""type"":""D"",""nr"":45,""val"":0},{""type"":""D"",""nr"":46,""val"":0},{""type"":""D"",""nr"":47,""val"":0 },{""type"":""D"",""nr"":48,""val"":0},{""type"":""D"",""nr"":49,""val"":0},{""nr"":50,""val"":13.50},{""nr"":51,""val"":-127.00},{""nr"":52,""val"":13.00},{""nr"":53,""val"":13.50},{""nr"":54,""val"":0},{""nr"":55,""val"":0.00},{""nr"":56, ""val"":0.00},{""nr"":57,""val"":0.00},{""nr"":58,""val"":0.00},{""nr"":59,""val"":0}]}";
            test = test.Replace(" ", "");
            dynamic myout = JsonConvert.DeserializeObject(test);
            foreach (var lijn in myout.data)
            {
                MessageBox.Show(lijn.nr.ToString() + " " + Convert.ToInt32(lijn.val).ToString());
            }
 
Indien je er zeker van kan zijn dat je json ook werkelijk "clean" is, is het niet zo heel moeilijk. Echter, bovenstaande voorbeeld bevat heel veel errors. Als dat de werkelijke output is, is het heel moeilijk om met standaard code daar wat mee te beginnen.

gelukkig lijken het alleen extra spaties te zijn en daar kun je wel redelijk mee om gaan:

Code:
            string test = @"{""data"":[{""type"":""D"",""nr"":10,""val"":1},{""type"":""D"",""nr"":11,""val"":0},{""type"":""D"",""nr"":12,""val"":0},{""type"":""D"","" nr"":13,""val"":0},{""type"":""D"",""nr"":14,""val"":0},{""type"":""D"",""nr"":15,""val"":0},{""type"":""D"",""nr"":16,""val"": 0},{""type"":""D"",""nr"":17,""val"":1},{""type"":""D"",""nr"":18,""val"":1},{""type"":""D"",""nr"":19,""val"":1},{""type"":""D "",""nr"":20,""val"":1},{""type"":""D"",""nr"":21,""val"":1},{""type"":""D"",""nr"":22,""val"":1},{""type"":""D"",""nr"":23,""va l"":1},{""type"":""D"",""nr"":24,""val"":1},{""type"":""D"",""nr"":25,""val"":1},{""type"":""D"",""nr"":26,""val"":1},{""type"" :""D"",""nr"":27,""val"":0},{""type"":""D"",""nr"":28,""val"":1},{""type"":""D"",""nr"":29,""val"":0},{""type"":""D"",""nr"":30, ""val"":1},{""type"":""D"",""nr"":31,""val"":0},{""type"":""D"",""nr"":32,""val"":1},{""type"":""D"",""nr"":33,""val"":1},{""ty pe"":""D"",""nr"":34,""val"":0},{""type"":""D"",""nr"":35,""val"":0},{""type"":""D"",""nr"":36,""val"":1},{""type"":""D"",""nr"": 37,""val"":1},{""type"":""D"",""nr"":38,""val"":1},{""type"":""D"",""nr"":39,""val"":1},{""type"":""D"",""nr"":40,""val"":0},{ ""type"":""D"",""nr"":41,""val"":0},{""type"":""D"",""nr"":42,""val"":0},{""type"":""D"",""nr"":43,""val"":0},{""type"":""D"",""n r"":44,""val"":0},{""type"":""D"",""nr"":45,""val"":0},{""type"":""D"",""nr"":46,""val"":0},{""type"":""D"",""nr"":47,""val"":0 },{""type"":""D"",""nr"":48,""val"":0},{""type"":""D"",""nr"":49,""val"":0},{""nr"":50,""val"":13.50},{""nr"":51,""val"":-127.00},{""nr"":52,""val"":13.00},{""nr"":53,""val"":13.50},{""nr"":54,""val"":0},{""nr"":55,""val"":0.00},{""nr"":56, ""val"":0.00},{""nr"":57,""val"":0.00},{""nr"":58,""val"":0.00},{""nr"":59,""val"":0}]}";
            test = test.Replace(" ", "");
            dynamic myout = JsonConvert.DeserializeObject(test);
            foreach (var lijn in myout.data)
            {
                MessageBox.Show(lijn.nr.ToString() + " " + Convert.ToInt32(lijn.val).ToString());
            }

Dank je hier ga ik me eens verder in verdiepen.
 
Dit werkt inderdaad goed. Alles komt nu mooi in de array te staan.
Als in nu met
Code:
int hltFillStatus = (myout.data[6].val);

De status van een poort in een int zet om een image te laten verschijnen als hltFillStatus ==1 dmv

Code:
 if (hltFillStatus == 0)
            { pictureBox_hltfill.Visible = false; }
            else
            { pictureBox_hltfill.Visible = true; }
krijg ik het bericht dat de variable niet bestaat. Dus hij is private. Kan ik waardes ook die private void krijgen met een return of moet ik hier een andere methode voor gebruiken?
 
Laatst bewerkt:
kun je niet beter een (global) dictionary vullen in die subroutine en vervolgens buiten je sub de dictionary met de laatste resultaten aanspreken? Het is voor mij moeilijk om de situatie in te schatten van hoe je alles wil gebruiken en ophalen.
 
Heb helaas even geen tijd om een werkend voorbeeld te maken maar je kan het eenvoudig zo doen:
Code:
[FORM/MAIN]
dictionary mydict = new dictionary();

[SUB 1]
   mydict.empty();
   getdata();
   foreach (lijnen)
     {
      dictionary.add (lijnen.nr ; convertoint32(val))
     {

[SUB 2]
    doeietsmet mydict

even in pseudocode natuurlijk.. sub1 zou je zelfs async kunnen doen om te reageren op nieuw binnenkomende data
 
Als je classes maakt die lijken op de JSON kun je met deserializeObject in Newtonsoft.Json de resultaten heel makkelijk omzetten naar een List of Array.

Bijvoorbeeld:
Code:
class jsonObject
    {
        public List<jsonChild> data;
    }
    class jsonChild
    {
        public string type { get; set; }
        public long nr { get; set; }
        public long val { get; set; }
    }

uit te lezen met:
Code:
string json = "{ "data":[{"type":"D","nr":10,"val":1},{"type":"D","nr":11,"val":0},{"type":"D","nr":12,"val":0},{"type":"D"," nr":13,"val":0},{"type":"D","nr":14,"val":0},{"type":"D","nr":15,"val":0},{"type":"D","nr":16,"val": 0},{"type":"D","nr":17,"val":1},{"type":"D","nr":18,"val":1},{"type":"D","nr":19,"val":1},{"type":"D ","nr":20,"val":1},{"type":"D","nr":21,"val":1},{"type":"D","nr":22,"val":1},{"type":"D","nr":23,"va l":1},{"type":"D","nr":24,"val":1},{"type":"D","nr":25,"val":1},{"type":"D","nr":26,"val":1},{"type" :"D","nr":27,"val":0},{"type":"D","nr":28,"val":1},{"type":"D","nr":29,"val":0},{"type":"D","nr":30, "val":1},{"type":"D","nr":31,"val":0},{"type":"D","nr":32,"val":1},{"type":"D","nr":33,"val":1},{"ty pe":"D","nr":34,"val":0},{"type":"D","nr":35,"val":0},{"type":"D","nr":36,"val":1},{"type":"D","nr": 37,"val":1},{"type":"D","nr":38,"val":1},{"type":"D","nr":39,"val":1},{"type":"D","nr":40,"val":0},{ "type":"D","nr":41,"val":0},{"type":"D","nr":42,"val":0},{"type":"D","nr":43,"val":0},{"type":"D","n r":44,"val":0},{"type":"D","nr":45,"val":0},{"type":"D","nr":46,"val":0},{"type":"D","nr":47,"val":0 },{"type":"D","nr":48,"val":0},{"type":"D","nr":49,"val":0},{"nr":50,"val":13.50},{"nr":51,"val":-127.00},{"nr":52,"val":13.00},{"nr":53,"val":13.50},{"nr":54,"val":0},{"nr":55,"val":0.00},{"nr":56, "val":0.00},{"nr":57,"val":0.00},{"nr":58,"val":0.00},{"nr":59,"val":0}]}";
            var r= JsonConvert.DeserializeObject<jsonObject>(json);
            foreach(var row in r.data)
            {
                Console.WriteLine("nr:" + row.nr + " type: "+row.type+" val: " + row.val);
            }
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan