Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[C#] json parser
Auteur Message
Répondre en citant
Message [C#] json parser 
Bonjour, je vous présente une commande externe de ma création, c'est pour Parser des JSON dans des batch, ça peut être utilisé pour des sauvegardes, des données télécharger, des données de jeu arbitraires...

Aide a écrit:
json tool for batch processing by Astie Teddy.
Official thread: http://batch.xoo.it/t4738-C-json.htm#p34991
Under MIT licence: http://opensource.org/licenses/MIT
Usage:
json <json file> [true/false: use parralel mode] [prefix (default: 'root')] [Equality char (default: '=')]

The parralel mode can be better for old computers or less core computers.

WARNING: Parralel mode can cause serius damage on laptops for overheating, we are not responsable of these damage.
AVERTISEMENT: Parrallel mode often cause higher CPU power

Le format de sortie sera le suivant:
Code:
Pour par exemple: {"transform":{"tilt":1,"pos":[45.3,47.6]},"Variable1":"12","Tableau":["string",7584,["Tableau en escalier"]]}
:: Pour comprendre plus facilement le fichier, l'analyser ici: http://www.jsoneditoronline.org/

Sortie dans la console:
root.transform.tilt=1
root.transform.pos[0]=45,3
root.transform.pos[1]=47,6
root.Variable1=12
root.Tableau[0]=string
root.Tableau[1]=7584
root.Tableau[2][0]=Tableau en escalier



La fonction multitache, permet d’exécuter les actions en parallèle (en C#, Parralele.For(each))
Elle peut fournir dans certains cas une performance inférieure ou supérieure (dépend de beaucoup de choses) mais prend pas loin de 100% de la charge CPU (contre <40% sans).
Seul différence dans la sortie, l'ordre est jamais le bon (comme l'UDP) et est totalement désorganisé:
Code:
root.Variable1=12
root.transform.tilt=1
root.Tableau[0]=string
root.Tableau[2][0]=Tableau en escalier
root.Tableau[1]=7584
root.transform.pos[0]=45,3
root.transform.pos[1]=47,6

On vois bien qu'il commence par le plus court pour finir par le plus long, cette sortie n'est pas le même dans tout les cas


Téléchargement: https://up1.ca/#WmGCMocOuZDoXqwqu5Q-PA (48ko)

Code:
// Framework 4.5 minimum, 4.5.2 recommandé
// fastJSON est requis pour utiliser et compiler le programme, le récupérer dans l'éxécutable de base, par package nugget https://www.nuget.org/packages/fastJSON/ ou aussi sur le codeplex: http://fastjson.codeplex.com/
/*
The MIT License (MIT)

Copyright (c) 2015 Astie Teddy

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/


using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using fastJSON;

namespace JsonParser
{
    class Program
    {
        static bool MultiTask = false;
      static char EqualityChar = '=';
        /// <summary>
        /// Arg 1: Path, arg2: MultiTask mode (fastest), arg3: Prefix, arg4: Equality char
        /// </summary>
        static void Main(string[] args)
        {
            if (args.Length == 0)
                ShowHelp();
            if (args[0] == "/?")
                ShowHelp();
            string prefix = "root";
            try
            {
                if (bool.TryParse(args[1], out MultiTask))
                {

                }
                else
                    MultiTask = false;
            } catch { MultiTask = false; }
            if (args.Length >= 3) prefix = args[3];
            if (args.Length >= 4) EqualityChar = args[4][0];
         
            object dyn = JSON.Parse(File.ReadAllText(args[0]));
            CheckObject(dyn, "", prefix);
        }

        static void ShowHelp()
        {
            Console.WriteLine("json tool for batch processing by Astie Teddy.");
            Console.WriteLine("Official thread: http://batch.xoo.it/t4738-C-json.htm#p34991");
            Console.WriteLine("Under MIT licence: http://opensource.org/licenses/MIT");
            Console.WriteLine("Usage: ");
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.Write("json <json file> [true/false: use parralel mode] [prefix (default: 'root')] [Equality char (default: '=')]\n\n");
            Console.WriteLine("The parralel mode can be better for old computers or less core computers.\n");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("WARNING: Parralel mode can cause serius damage on laptops for overheating, we are not responsable of these damage.");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("AVERTISEMENT: Parrallel mode often cause higher CPU power");
            Console.ResetColor();
            Environment.Exit(0);
        }

        static void CheckObject(object obj, string name, string JsonPath)
        {
            if (obj is List<object>)
                ArrayLoop(((List<object>)obj).ToArray(), JsonPath + name);
            else if (obj is Dictionary<string, object>)
                ObjectLoop((Dictionary<string, object>)obj, JsonPath + name + '.');
            else
            {
                Console.WriteLine("{0}" + EqualityChar + "{1}", JsonPath + name, obj.ToString());
            }
        }

        static void ObjectLoop(Dictionary<string, object> Object, string Prefix)
        {
            if (MultiTask)
                Parallel.ForEach(Object, (KeyValuePair<string, object> item) => { CheckObject(item.Value, item.Key, Prefix); });
            else
                foreach (KeyValuePair<string, object> item in Object)
                    CheckObject(item.Value, item.Key, Prefix);
        }

        static void ArrayLoop(object[] Objects, string Prefix)
        {
            if (MultiTask)
                Parallel.For(0, Objects.Length, (long index) => { CheckObject(Objects[index], "[" + index + "]", Prefix); });
            else
                for (long i = 0; i < Objects.Length; i++)
                    CheckObject(Objects[i],"[" + i + "]", Prefix);
        }
    }
}



Si vous cherchez des json pour tester la commande externe:
http://mtgjson.com/
Tankx (archives):
http://pastebin.com/iQbkHzYZ
http://pastebin.com/ruDmMvC3

Mise a jour, code mis a jour:
Citation:
Ajout de l'aide disponible en faisant:
json /? ou json
Ajout de l'argument "EqualityChar" permettant de changer le symbole séparant le chemin et la valeur.
Et un avertissement concernant le Parralele




Dernière édition par TSnake41 le Ven 21 Aoû 2015 - 14:31; édité 1 fois

______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [C#] json parser 
Oh cool ça pour épargner du travail a for qui est faignaiant Laughing merci, je test en rentrant de vacances XD




______________________________________________________
Visiter le site web du posteur
Répondre en citant
Message [C#] json parser 
Pour le faire passer en variable, j'ai fais ça:
Code:
for /f "delims== tokens=1,*" %%A in ('json test.json true') do (
   set %%A=%%B
)


EDIT: Mise a jour !




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#] json parser 
I want to use this in my project Very Happy



Visiter le site web du posteur
Répondre en citant
Message [C#] json parser 
Diegox64 a écrit:
I want to use this in my project Very Happy

no problem,

the MIT licence allow you to freely use my external command :
Code:
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


hmm, link seem dead, up1.ca have some issues, see here for new download : https://1drv.ms/f/s!Ao64nlgUfTexg_Ey2IFhtAO388cAzA




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message [C#] json parser 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch