argumentum Posted January 25, 2016 Posted January 25, 2016 (edited) On 1/24/2016 at 5:23 AM, Jury said: Attached is an example of my data - it takes some time but then the end is an array of over 20,000 lines. I felt bad for the time JsonArrayfied took to do it's work. So I wrote something different that may be useful to you. expandcollapse popup#include <JSon.au3> #include <Array.au3> Local $t = TimerInit() Local $sJson_3 = FileRead("cma-cases.json") ConsoleWrite('--- FileRead : ' & TimerDiff($t) / 1000 & ' secs.' & @CRLF) $t = TimerInit() Local $Data2 = Json_Decode($sJson_3) ConsoleWrite('--- Json_Decode : ' & TimerDiff($t) / 1000 & ' secs.' & @CRLF) $t = TimerInit() Local $Json3 = Json_Encode($Data2, $Json_PRETTY_PRINT, "\t", "\n", "\n") ConsoleWrite('--- Json_Encode : ' & TimerDiff($t) / 1000 & ' secs.' & @CRLF) ;~ ConsoleWrite($Json3 & @CRLF) $t = TimerInit() Local $aOut = Json_Encode_Array_v1($Json3) ConsoleWrite('--- Json_Encode_Array : ' & TimerDiff($t) / 1000 & ' secs.' & @CRLF) _ArrayDisplay($aOut, "Json_Encode_Array") Func Json_Encode_Array_v1($sJsonPrettyPrint) Local $n, $m, $aJsonPrettyPrint = StringSplit($sJsonPrettyPrint, @LF) Local $iArrayColumns = 20 Local $aOut[UBound($aJsonPrettyPrint) + 1][$iArrayColumns] ;~ Local $aCounter[$iArrayColumns + 1] ;~ For $n = 0 To $iArrayColumns ; for future use ;~ $aCounter[$n] = 0 ; will use in v2 of this function ( if I ever get to do it ) ;~ Next ; to add the array and object count as in JsonArrayfied() Local $b, $c, $i = 0, $iArrayMaxColumnsUsed = 0 For $n = 1 To $aJsonPrettyPrint[0] $b = StringSplit($aJsonPrettyPrint[$n], @TAB) $c = StringSplit($b[$b[0]], '":', 1) $i += 1 Switch StringStripWS($aJsonPrettyPrint[$n], 8) Case "{" $aOut[$i][0] = "ObjectStart" $aOut[$i][Int($b[0] / 2) + 1] = "{" ContinueLoop Case "}" $aOut[$i][0] = "ObjectEnd" $aOut[$i][Int($b[0] / 2) + 1] = "}" ContinueLoop Case "]" $aOut[$i][0] = "ArrayEnd" $aOut[$i][Int($b[0] / 2) + 1] = "]" ContinueLoop EndSwitch $c[2] = StringTrimLeft($c[2], 1) $aOut[$i][Int($b[0] / 2)] = StringTrimLeft($c[1], 1) $aOut[$i][Int($b[0] / 2) + 1] = $c[2] If Int($b[0] / 2) > $iArrayMaxColumnsUsed Then $iArrayMaxColumnsUsed = Int($b[0] / 2) If $c[2] = "[" Then $aOut[$i][0] = "ArrayStart" ContinueLoop EndIf If StringInStr($c[2], '"') Then $aOut[$i][0] = "String" ElseIf $c[2] = "{" Then $aOut[$i][0] = "ObjectStart" ElseIf $c[2] = "}" Then $aOut[$i][0] = "ObjectEnd" ElseIf $c[2] = "{}" Then $aOut[$i][0] = "ObjectEmpty" ElseIf $c[2] = "[" Then $aOut[$i][0] = "ArrayStart" ElseIf $c[2] = "]" Then $aOut[$i][0] = "ArrayEnd" ElseIf $c[2] = "[]" Then $aOut[$i][0] = "ArrayEmpty" ElseIf $c[2] = "null" Then ; http://www.tutorialspoint.com/json/json_data_types.htm $aOut[$i][0] = "Null" ; http://stackoverflow.com/questions/8204578/what-is-the-type-of-null-literal ElseIf $c[2] = "true" Or $c[2] = "false" Then $aOut[$i][0] = "Bool" Else $aOut[$i][0] = "Number" EndIf Next $aOut[0][0] = $i $aOut[0][1] = $iArrayMaxColumnsUsed + 1 ReDim $aOut[$i + 1][$iArrayMaxColumnsUsed + 2] Return $aOut EndFunc ;==>Json_Encode_Array_v1 try it out. It's way faster. Edit: I just now realized that it works fine with your json but not with other json, so use it as an example of something faster but that is all. Edited January 25, 2016 by argumentum Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
szocsmarci Posted February 7, 2016 Posted February 7, 2016 Hi Sorry for disturbing, but I had no luck to find the jsmn.au3 or json.au3 file to download. All possibilites are striked through / underlined and led to an empty page (the first pages links) . Am I this blind?
argumentum Posted February 7, 2016 Posted February 7, 2016 1 minute ago, szocsmarci said: Hi... ... Am I this blind? szocsmarci 1 Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
szocsmarci Posted February 7, 2016 Posted February 7, 2016 Hi Thanks for the quick replay, I read through, but somehow I missed it. I'm not a Json master (nor XML), so I stucked. Its a really basic text, but I can't get a simple data from it. #Include "Json.au3" ;Two text, the $Json_simplest is just for technical reason Local $Json = "{'status':'ok','meta':{'count':1},'data':{'519937860':{'statistics':{'all':{'battles':1398}}}}}" Local $Json_simplest = "{'battles':1398}" ;Decode with UDF Local $Obj = Json_Decode ($Json) Local $Obj_simplest = Json_Decode ($Json_simplest) ;Basic querys, with empty data given back ConsoleWrite( "status:" & Json_Get ($Obj, '[status]') & @LF) ConsoleWrite( "battles:" & Json_Get ($Obj, '[data][519937860][statistics][all][battles]') & @LF) ;Simplest basic query ConsoleWrite( "battles_simplest:" & Json_Get ($Obj_simplest, '[battles]') & @LF) What the good code looks like? I couldn't find tutorial for json querys.
argumentum Posted February 8, 2016 Posted February 8, 2016 3 hours ago, szocsmarci said: Hi Thanks for the quick replay, I read through, but somehow I missed it. I'm not a Json master (nor XML), so I stucked. Its a really basic text, but I can't get a simple data from it. #Include "Json.au3" ;Two text, the $Json_simplest is just for technical reason Local $Json = "{'status':'ok','meta':{'count':1},'data':{'519937860':{'statistics':{'all':{'battles':1398}}}}}" Local $Json_simplest = "{'battles':1398}" ;Decode with UDF Local $Obj = Json_Decode ($Json) Local $Obj_simplest = Json_Decode ($Json_simplest) ;Basic querys, with empty data given back ConsoleWrite( "status:" & Json_Get ($Obj, '[status]') & @LF) ConsoleWrite( "battles:" & Json_Get ($Obj, '[data][519937860][statistics][all][battles]') & @LF) ;Simplest basic query ConsoleWrite( "battles_simplest:" & Json_Get ($Obj_simplest, '[battles]') & @LF) What the good code looks like? I couldn't find tutorial for json querys. ;Simplest basic query ConsoleWrite( "battles_simplest:" & Json_Get ($Obj_simplest, "['battles']") & @LF) ; not much of a difference, use ConsoleWriteJson($Obj_simplest) to get what you need, ConsoleWriteJson is posted somewere in my signature. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
szocsmarci Posted February 8, 2016 Posted February 8, 2016 (edited) Thanks a lot, it works. Curious thing the apostrophs. #Include "Json.au3" Local $text1 = '{"status":"ok","meta":{"count":1},"data":{"519937860":{"statistics":{"all":{"battles":1404}}}}}' Local $Obj1 = Json_Decode ($text1) Local $battles1 = Json_Get ($Obj1, '["data"]["519937860"]["statistics"]["all"]["battles"]') ConsoleWrite( "battles Text1:" & $battles1 & @LF) Local $text2 = "{'status':'ok','meta':{'count':1},'data':{'519937860':{'statistics':{'all':{'battles':1404}}}}}" Local $Obj2 = Json_Decode ($text2) Local $battles2 = Json_Get ($Obj2, "['data']['519937860']['statistics']['all']['battles']") ConsoleWrite( "battles Text2:" & $battles2 & @LF) See the " and the ' swapping in the origin text and the Json_Get query. Edited February 8, 2016 by szocsmarci argumentum 1
greenfield Posted March 24, 2016 Posted March 24, 2016 I'd like to get some help from Json experts. I want to add some Json data into my json file. For example, mydata.json = [{"data":"apple","weight":"180"}]. I want to add some data in this json file such as {"data":"graph", "weight":"100"}. my result json data is mydata.json = [{"data":"apple","weight":"180"},{"data":"graph", "weight":"100"}].
trekker Posted May 23, 2016 Posted May 23, 2016 (edited) i'm experimenting with a json file. with this code i can get individual cell values: ConsoleWrite(Json_Get($Obj, '["aaData"][0]["date"]') & @LF) ConsoleWrite(Json_Get($Obj, '["aaData"][0]["status"]') & @LF) ConsoleWrite(Json_Get($Obj, '["aaData"][0]["amount"]') & @LF) but how do i loop through if the number of rows is unknow? Tried first getting the "aaData" object but not sure how make a loop!? I can use this code to determ how many items are in each row, but i need to know the number of rows to loop through them? $myarray = (Json_Get($Obj, '["aaData"][0]')) ConsoleWrite(Json_ObjGetCount($myarray)) $myarray = (Json_Get($Obj, '["aaData"][0]')) ConsoleWrite(Json_ObjGetCount($myarray)) Feeling i'm missing something very obvious Edited May 23, 2016 by trekker
trekker Posted May 24, 2016 Posted May 24, 2016 solved it: Local $Obj = Json_Decode($Json1) $myarray = (Json_Get($Obj, '["aaData"]')) $i = 0 For $element IN $myarray ConsoleWrite(Json_Get($myarray[$i], '["date"]') & @LF) ConsoleWrite(Json_Get($myarray[$i], '["status"]') & @LF) ConsoleWrite(Json_Get($myarray[$i], '["amount"]') & @LF) ConsoleWrite(Json_Get($myarray[$i], '["creditDebitType"]') & @LF) ConsoleWrite(Json_Get($myarray[$i], '["sourceDestinationDescriptor"]') & @LF) ConsoleWrite(Json_Get($myarray[$i], '["description"]') & @LF) $i = $i + 1 next argumentum 1
Chamlien Posted May 26, 2016 Posted May 26, 2016 the json.zip is not available to download, where i can get it , thanks a lot
argumentum Posted May 26, 2016 Posted May 26, 2016 1 hour ago, Chamlien said: the json.zip is not available to download, where i can get it , thanks a lot https://www.autoitscript.com/forum/topic/148114-a-non-strict-json-udf-jsmn/?do=findComment&comment=1286205 Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
Chamlien Posted May 28, 2016 Posted May 28, 2016 On 2016年5月26日 at 0:59 AM, argumentum said: https://www.autoitscript.com/forum/topic/148114-a-non-strict-json-udf-jsmn/?do=findComment&comment=1286205 Get it! Thanks very much, great help! argumentum 1
Mentis Posted June 17, 2016 Posted June 17, 2016 (edited) ill rephrase my question tomorrow /edit Edited June 17, 2016 by Mentis
Dreamfire Posted June 22, 2016 Posted June 22, 2016 Could the latest release be attached to the forum thread? Some people (like me) may not be allowed to download from Google Drive
argumentum Posted June 22, 2016 Posted June 22, 2016 ok @Dreamfire , but I don't understand why you'd not be allowed to download from Google drive. Json(2015.01.08).zip Dreamfire 1 Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
Dreamfire Posted June 22, 2016 Posted June 22, 2016 28 minutes ago, argumentum said: Json(2015.01.08).zip Thanks @argumentum Some countries/companies do not allow access to such services for censorship/security reasons.https://en.wikipedia.org/wiki/Great_Firewall - It's not just security. It's defence. argumentum 1
satanico64 Posted December 26, 2016 Posted December 26, 2016 hi guys, When i add an entry like this, it's the '0000' are truncaded... Json_Put($Obj, ".00000000465", "foo") #Include "Json.au3" ConsoleWrite("resultat:" & test3() & @crlf ) Func Test3() Local $Obj Json_Put($Obj, ".00000000465", "foo") Json_Put($Obj, ".bar[0]", "bar") Json_Put($Obj, ".test[1].foo.bar[2].foo.bar", "Test") ; dot notation Local $Json = Json_Encode($Obj,$Json_PRETTY_PRINT) ConsoleWrite("Test3 Result: " & $Json & @LF) ;~ Return Json_Get($Obj, '["test"][1]["foo"]["bar"][2]["foo"]["bar"]') = "Test" ; square bracket notation EndFunc Result is: { "465": "foo", "bar": [ "bar" ], "test": [ "", { "foo": { "bar": [ "", "", { "foo": { "bar": "Test" } } ] } } ] } so i have an existing json in which an object is named '00000000465', an i want to ad an entry, but my command; Json_Put($Obj, ".00000000465", "foo") this command only create a new object '465' Test file added. Thanks to all Nicolas. Json_Test.au3
satanico64 Posted December 26, 2016 Posted December 26, 2016 ok i answer to myself, found this, which seems to mean that dot notation can't be used with number data.. Func Json_Put(ByRef $Var, $Notation, $Data, $CheckExists = False) [...] $Index = String(Json_Decode($Match[3])) ; only string using dot notation So i' got this { "0000000001": { "name": "toto", "ADR_IP": "192.168.1.1" }, "0000000002": { "name": "titi", "ADR_IP": "192.168.1.2" } } How can i add en entry into 0000000002 ? thanks
satanico64 Posted December 26, 2016 Posted December 26, 2016 (edited) ok ok... i've found .. end of the monologue.. thanks. Json_Put($Obj,'["POPO"]["NUM_CONTRAT"]','valeurtoto') Json_Put($Obj,'["POPO"][bplbb][rzrrzr]','valeurtoto') Json_Put($Obj,'["POPO"]["0000000045646"][rzrrtttzr]','valeurtoto') Json_Put($Obj, ".bar[0]", "bar") Json_Put($Obj, ".test[1].foo.bar[2].foo.bar", "Test") ; dot notation EDIT: Use of Quote & double quote important example: $akeys = Json_ObjGetKeys($JsoEqpt) Json_Get($JsoEqpt, '["' & $akeys[0] & '"]["tagInge"]') => OK Key between Double quotes: ' [ " ' & $akeys Json_Get($JsoEqpt, '["' & $akeys[0] & "']['tagInge']") => Not OK, key between simple quotes " [ ' " & $akeys I must indicate that my keys are Numbers only overwise i think it's ok with string key! Edited March 10, 2017 by satanico64 use of double quote argumentum 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now