Loading…
Tilbage

Profilbillede

Invalid json i fil for Svendborg kommune (0479)

Stefan Thordarson

Når jeg forsøger at parse resultatet fra adresser?format=json&kommunekode=479 så fejler den under parsning.

Alle andre kommuner er OK, og fejlen har jeg kun oplevet i mine kørsler den 10.feb og 17.feb.

Fejlbesked fra parseren: System.InvalidOperationException: Cannot access child value on Newtonsoft.Json.Linq.JValue. at Newtonsoft.Json.Linq.JToken.get_Item(Object key)
at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)  

Håber der noget der kan fikses. Sig til hvis jeg kan hjælpe med yderligere.

 

vh. Stefan

 

Hej Stefan

Jeg har ikke kunne genskabe fejlen. Jeg får fint parset Svendborg kommunes 36577 adresser.

Har du mulighed for at undersøge, hvor i data parsningen fejler?

Mvh.
Finn

Hej Finn,

Tak for hurtig response.

det vil jeg gerne, har kæmpet med at downloade json fra https://dawa.aws.dk/adresser?format=json&kommunekode=479 men browseren bliver kvalt (både Chrome og IE )

Vores system læser det ind i en stream, men vi har det ikke gemt som en fil.

Vil gerne prøve igen ved lejlighed

Vh. Stefan

Hej Finn, så fik jeg downloadet filen (skulle lige have et 0 med i kommunekoden).

Det giver en fil på ca. 130 MB og den kan jeg fint læse ind en Windows-applikation, så JSON-koden er umiddelbar valid.

Det undrer mig at kun netop Skanderborg fejl i min applikation, og kun de 2 sidste to uger.

Vores kode der indlæser filen,kan du spotte noget her :

 

var streamReader = new StreamReader(stream);
JsonTextReader reader = new JsonTextReader(streamReader);


using (reader)
{
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartObject)
{
dynamic adresser = JObject.Load(reader); // HER CHRASHER DEN...

 

 

Hej Finn,

Så har jeg fået sat debugger på, og ser at den klarer fint de første 105914 adresser, dvs. den fejler konsekvent på denne adresse:

Vejstruplund;5A  5882Vejstrup  (Kvhx = 04790663__5A_______ )

 

 NameValueType Message"Cannot access child value on Newtonsoft.Json.Linq.JValue."string

 

Vh 

Hej Stefan

Vejstruplund 5A, 5883 Oure er lidt speciel, da den mangler et adgangspunkt.

Jeg vil undersøge hvorfor den ikke har et.

Til trods for det manglende adgangspunkt er JSON svaret gyldigt, så din JSON parser burde ikke fejle.

Anvender du JSON schema i parsningen?

ændret af Finn Jordal (20.02.2019)

Hej Finn, tak for at se på dette,

Jeg bruger ikke schema, og jeg er enig at den ikke burde fejle.

Men koden har kørt hver uge i flere måneder uden fejl, så dette er lidt mystisk. Jeg har forsøgt at lave Json validering på husnummer 5A samt husnummer 8 og begge validerer OK.  Men denne her fejler : dynamic adresser = JObject.Load(reader)

 

Vh. Stefan

Jeg prøvede at hente CSV-udgaven af Svendborg kommune, og ser her at der ligger ca. 160 adresser med Status=3, hvor netop Vejstruplund;5A er i blandt.

Husker jeg ret, så bør Status=3 adresser ikke være inkluderet ?

Hej Stefan

DAWA udstille både gældende (status=1) og foreløbige (status=3) adresser.

Foreløbige adresser anvendes typisk ved nyudstykninger, så byggefirmaerne, forsyningsselskaberne og beredskabet kan lokaliserer stedet før og under etableringen.

Mvh.
Finn

Hej Finn,  

Ja det var nok Status=2 og 4 jeg tænkte på, API-dokumentationen beskriver det fornemt : https://dawa.aws.dk/dok/api/adgangsadresse

 

Ville du undersøge hvorfor Vejstruplund;5A ikke har et adgangspunkt?

Jeg vil gerne høre om I vil frasortere adresser uden adgangsadresser i udtrækket, da disse har givet os os problem med indlæsningen.

Vi har i vores system 3691550 adresser, der alle har adgangsadresseId udfyldt.

Vh. Stefan

 

 

Hej Stefan

Danmarks Adresseregisters (DAR) leverandør undersøger årsagen til det manglende adgangspunkt.

I næste release af DAWA vil adgangsadresser uden adgangspunkt blive filtreret fra med mindre parameteren medtagugyldige anvendes.

Har I overvejet at anvende DAWA's replikerings API til at etablere en lokal, opdateres kopi af adressedata? Du kan læse en guide til replikereings API her.
Hvis I anvender en PostgreSQL database er det endnu lettere, da I så kan anvende replikeringsklienten.

Mvh.
Finn

Problemet er løst, jeg har nu kørt Svendborg ind.

 

- Egentlig ville jeg helst indlæse data som med parameteren format=csv, der giver mindre footprint. Men her returneres kun koordinaterne på adgangadressen, så derfor bruger jeg format=json parameteren.

 

- Vedr. replikerings-API, så har jeg det ind i overvejelserne. Lige nu er vi fint tilfredse med nuværende løsning. Replikerings-API kan også have udfordringer, kan se der er oprettet sag her på forummet :-)

 

Bedste hilsner - lukker sagen hermed

Stefan Th.

 

 

 

 

 

 

 

Hej Stefan

Hvilke data mangler du i CSV formatet?

Mvh.
Finn

Hej Finn,

Per hukommelse, så indeholder CSV-formatet koordinater for selve adressen - men kun i UTM32, men jeg havde brug for WGS84.  Gør ikke en sag ud af dette, JSON-format er udmærket.

Vh. Stefan

 

Hej Stefan

Som default modtager du adgangspunkterne i WGS84:

https://dawa.aws.dk/adresser?format=csv

Mvh.
Finn