login  Naam:   Wachtwoord: 
Registreer je!
 Forum

JSON + Struct + List (Opgelost)

Offline larssy1 - 10/11/2011 22:33 (laatste wijziging 10/11/2011 22:34)
Avatar van larssy1MySQL beginner Hoi mensen,

Iemand die mij hierbij toevallig kan helpen??

Er is JSON output:
http://www.unrealxs.com/beta/stats.php

dat ik ophaal in mijn app, Nu wil ik dus de 5 beste wapens hebben,
Hiervan heb ik al een groot deel geprogrammeerd, maar heb wat nodig voor de rest.

Let er wel op dat dit een Windows Phone app is.

[B]MainPage.xaml.cs[/B]
[I]function for in the main/content file.[/I]
[CODE=csharp]
private List<data.Weapon> getBestWeapons(StreamReader reader)
{
List<data.Weapon> weapons = new List<data.Weapon>();

var json = reader.ReadToEnd();
var jObject = JObject.Parse(json);

foreach (var n in jObject["stats"]["weapons"])
{
weapons.Add(new data.Weapon());
}

data.Weapons sorted = new data.Weapons();
return sorted.getSortedWeaponList(weapons);
}
[/CODE]

[B]Weapon class[/B]
[I]weapon struct, unlocks struct, sortedlist function[/I]
[CODE=csharp]
public struct Weapon
{
public string name { get; set; }
public double time { get; set; }
public Key kills { get; set; }
public int headshots { get; set; }
public int hits { get; set; }
public int shots { get; set; }
public int servicestars { get; set; }
public string desc { get; set; }
public string license { get; set; }
public string category { get; set; }
public string kit { get; set; }
public string range { get; set; }
public int fireModeAuto { get; set; }
public int rateOfFire { get; set; }
public int fireModeBurst { get; set; }
public int fireModeSingle { get; set; }
public string img { get; set; }
public List<WeaponUnlocks> unlocks { get; set; }
}

public struct WeaponUnlocks
{
public int id { get; set; }
public string name { get; set; }
public int curr { get; set; }
public int needed { get; set; }
public string nname { get; set; }
public string img { get; set; }
}

public class Weapons
{
public List<Weapon> getSortedWeaponList(List<Weapon> list)
{
if (typeof(List<Weapon>) == list.GetType())
{
return list;
}

foreach (Weapon wep in list)
{
list.OrderBy(x => x.kills);
}

return list;
}
}
[/CODE]

12 antwoorden

Gesponsorde links
Offline Ontani - 11/11/2011 10:56
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Opnieuw dezelfde reactie als eerst. Dat is geen JSON, dat is gewoon een PHP Array print_r
Offline larssy1 - 11/11/2011 12:54 (laatste wijziging 14/11/2011 11:04)
Avatar van larssy1 MySQL beginner Hmm, dacht niet dat dat bij deze van belang was..

http://www.unrealxs.com/beta/showplayer.js is nog gewoon toegangbaar als goed is.

--

Anyone?
Offline cyberninjah - 14/11/2011 16:46
Avatar van cyberninjah Lid Waar is nou je json output ?
Offline larssy1 - 14/11/2011 17:00 (laatste wijziging 17/11/2011 23:04)
Avatar van larssy1 MySQL beginner showplayer.js kijk in the post voor je 

-----------------
zinloze code even weggehaald.
---
Ik heb nu dat hij de weapons uitleest, maar nu in 1x geeft hij maar 4 items, inplaats van 128 aan.

En het wapen heeft in 1x 31 unlocks, wat dus ook niet klopt..
Ik vraag me dus echt af wat ik hier fout doe..

http://pastebin.com/J82qurPE
---
Zonder het toevoegen van de unlocks is het trouwens wel normaal.
----------------------
Ik zie net dat de 'actual' capacity maar 65 is, terwijl hij 128 items aangeeft..
----------------------
nieuwe source:
http://pastebin.com/a7KMSA6k

Hij zet de waardes nu wel goed neer, maar hij maakt nog telkens 128 items aan, inplaats van 65, en 32 unlock items, inplaats van 18..
Offline ArieMedia - 18/11/2011 00:21
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Misschien begrijp ik je verkeerd, maar de link naar showplayer.js is (heel verrassend) een javascript. Als ik jou laatste reactie goed interpreteer (waar dus gevraagd wordt naar een JSON), vertel je ons dat dit (1) jou JSON is. In deze (2) link beweer je een JSON te hebben, wat al eerder is tegengesproken door Ontani.

(1) Op mijn bovenstaande gegeven borduur ik even voort.

Javascript - Een "programmeertaal".
Json - Een methode om gevevens uit te wisselen.

(2) Zoals al eerder verteld, dit is gewoon een print_r, en geen JSON.
Een Json ziet er bijvoorbeeld zo uit: voorbeeld.

Mogelijke oplossing
Gezien je met php werkt, en al een array hebt ben je al super ver, het enige wat jij moet doen om een json op die pagina tevoorschijn te toveren is het volgende:

  1. $aGegevenData = array(); // dit is de array zoals die in het topic is gegeven
  2. echo json_encode($aGegevenData);


En voila, u hebt een json. Deze JSON kan je later via javascript weer uitlezen.
Offline Abbas - 18/11/2011 00:53
Avatar van Abbas Gouden medaille

Crew .NET
Citaat:
Gezien je met php werkt
Erhm C# is ook goed.. 
Offline Maarten - 18/11/2011 09:17 (laatste wijziging 18/11/2011 09:21)
Avatar van Maarten Erelid @ArieMedia & slightly offtopic:
nu wil ik niet gaan moeilijk doen, maar hij heeft al eens een vraag gesteld hierrond, en ik heb hem dan JSON.NET aangereikt, en dat parst die variabele gewoon hoor (file (1) zoals jij aangeeft).. (zie die jObject zooi in zijn code).

Jij zegt dat (1) een "JavaScript" is. Waarom? Omdat er .js achter staat? Het gaat over de inhoud, die is structureel perfect te verwerken.

Ik heb nu geen tijd om de eigenlijke vraag te gaan bestuderen, maar ik wilde toch even melden aan topicstarter dat zijn opzet wel goed is 

edit: toch even snel gekeken Kan je daar niet gewoon LINQ op loslaten (weet niet wat kan op WP)? weapons.OrderBy(w => w.whateverParameter).Take(5)?

Als dit chinees klinkt, google ff LINQ en je zal zien dat dit echt superhandig is om eenvoudig juiste data te selecteren.
Normaal volstaat het "using System.Linq" toe te voegen bovenaan, en dan kan je dit zeker al gebruiken op List-objecten, IQueryable-objecten,...

Good luck.
Bedankt door: Abbas
Offline larssy1 - 18/11/2011 13:07 (laatste wijziging 18/11/2011 13:12)
Avatar van larssy1 MySQL beginner Bedankt voor het antwoorden mensen.

@ArieMedia
Zoals titjes zei, het is C# en geen PHP.
daarnaast is showplayer.js is wel degelijk JSON file.

Daarnaast, let er wel op dat ik zoals maarten ook al zei, de JSON wel gewoon parse.

waarvan dit een oud exemplaar is, waarvan ik nu een aangepaste versie gebruik:
  1. void RequestSoldierInfo()
  2. {
  3. HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.unrealxs.com/beta/showplayer.js");
  4. }
  5.  
  6. void Response_Completed(IAsyncResult result)
  7. {
  8. HttpWebRequest request = (HttpWebRequest)result.AsyncState;
  9. HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
  10.  
  11. Stream stream = response.GetResponseStream();
  12. StreamReader reader = new StreamReader(stream);
  13.  
  14. var json = reader.ReadToEnd();
  15. json = json.Replace("var p = ", string.Empty);
  16.  
  17. var jObject = JObject.Parse(json);
  18.  
  19. string soldiername = jObject['name'].ToString();
  20. }


@Maarten
Bedankt voor je compliment met dat ik toch een eigen initiatief heb genomen.

Daarnaast wil ik wel even iets vragen over je LINQ,
Ik ben hier inderdaad niet bekent mee, en heb er enkel van gehoort.
Maar omdat het aantal wapens tot zover 65 is, en mogelijk zal worden verhoogt met komende uitbreidingen, werkt deze code dan nog wel perfect?

zoals in : weapons.OrderBy(w => w.whateverParameter).All()?

----------------
Daarnaast geloof ik niet echt dat ik duidelijk heb gemaakt wat het probleem precies is.

Alles werkt gewoon, hij haalt keurig de wapens en unlocks op.
Echter geeft hij aan dat er in de getWeapons 128 items zitten, met ieders 32 unlocks.

Inplaats van 65 items, met ieders 18 unlocks.

Mijn vraag is dus ook, klopt mijn code eigenlijk wel?
Offline Maarten - 18/11/2011 14:09
Avatar van Maarten Erelid Als de aantal zouden verhogen blijft die code werken, ja, geen probleem.

Wat betreft de foute aantallen: hoe weet je dat het er 65 zijn? Vermoedelijk omdat jij ook over de brondata beschikt in het origineel - SQL ofzo - formaat... ik zou anders eens gaan kijken of het niet aan de JSON structuur ligt? Bijvoorbeeld door ergens een applicatie of iets te gaan zoeken die het parsed in een ander formaat (iets visueel) waardoor je kan kijken op hoeveel die applicatie uitkomt... dan weet je toch al of het aan de JSON of aan de applicatie ligt.

Weet niet hoor, ben maar hardop aan het denken 
Offline larssy1 - 18/11/2011 15:29 (laatste wijziging 18/11/2011 15:47)
Avatar van larssy1 MySQL beginner Nou, ik ben eigenlijk gewoon dom gaan kijken onder het debuggen.

Zo zag ik bij enkelen dat er een valid value inzat, en bij anderen een null expression.
Daarnaast stond bij Capacity 65 , wat hierbij vanaf 0 tot en met 64 is.
-------
Heb net als controle even in PHP gedaan, en hier kreeg ik 65 terug.
Mijn theorie klopt dus.

Kijk output: http://www.unrealxs.com/beta/stats.php
Offline Abbas - 18/11/2011 15:57
Avatar van Abbas Gouden medaille

Crew .NET
Dat bewijst niets!  Een pre-tag met een waarde van 65 erin. Wordt er bij het tellen niet ergens teveel geteld. Laar ansders die code eens zien die de wapens gaat tellen.. 
Offline larssy1 - 18/11/2011 17:49
Avatar van larssy1 MySQL beginner
titjes schreef:
Dat bewijst niets!  Een pre-tag met een waarde van 65 erin. Wordt er bij het tellen niet ergens teveel geteld. Laar ansders die code eens zien die de wapens gaat tellen.. 

  1. foreach($data['list'] as $d)
  2. {
  3. $stats=$d['stats'];
  4.  
  5. $count = 0;
  6. foreach($stats['weapons'] as $w)
  7. {
  8. $count++;
  9. }
  10.  
  11. echo "weapon count: ". $count;
  12. }
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.248s