Warning, /education/gcompris/src/core/JsonParser.qml is written in an unsupported language. File is not indexed.

0001 /* GCompris - JsonParser.qml
0002  *
0003  * SPDX-FileCopyrightText: 2014 Holger Kaelberer <holger.k@elberer.de>
0004  *
0005  * Authors:
0006  *   Holger Kaelberer <holger.k@elberer.de>
0007  *
0008  *   SPDX-License-Identifier: GPL-3.0-or-later
0009  */
0010 
0011 import QtQuick 2.12
0012 import GCompris 1.0
0013 
0014 /**
0015  * A QML helper component for loading and validating JSON data.
0016  * @ingroup components
0017  *
0018  * @inherit QtQuick.Item
0019  */
0020 QtObject {
0021     id: jsonparser
0022 
0023     /**
0024      * type:File
0025      * File with json content to parse.
0026      */
0027     property File jsonFile: File {
0028         id: jsonfile
0029         name: ""
0030 
0031         onError: jsonparser.error(msg);
0032     }
0033 
0034     /**
0035      * Emitted upon error.
0036      *
0037      * @param msg Error message.
0038      */
0039     signal error(string msg);
0040 
0041     /* public interface: */
0042 
0043     /**
0044      * Parse the passed json string and return a corresponding object.
0045      *
0046      * @param type:string json JSON string to parse.
0047      * @param type:function validateFunc Function used to semantically validate
0048      *      the parsed json [optional].
0049      *      The function must have the signature
0050      *      <tt>bool validateFunc(jsonString)</tt>
0051      *      and return @c true if json string is semantically
0052      *      valid, @c false otherwise.
0053      * @returns The object parsed from json if valid, @c null if json is
0054      *          syntactically or semantically invalid.
0055      */
0056     function parseString(json, validateFunc)
0057     {
0058         var doc;
0059         try {
0060             doc = JSON.parse(json);
0061             // validate if requested:
0062             if (validateFunc !== undefined
0063                 && !validateFunc(doc)) {
0064                     error("JsonParser: JSON is semantically invalid");
0065                     return null;
0066             }
0067         } catch(e) {
0068             error("JsonParser: JSON is syntactically invalid: " + e);
0069             return null;
0070         }
0071         return doc;
0072     }
0073 
0074     /**
0075      * Parse a json string from the given url and return a corresponding
0076      * object.
0077      *
0078      * @param type:string url Source URL for the json file to parse.
0079      *        Supported URL-schemes: file://, qrc://.
0080      * @param type:functions validateFunc cf. @ref parseString
0081      * @returns cf. @ref parseString
0082      */
0083     function parseFromUrl(url, validateFunc)
0084     {
0085         var json = "'";
0086         if (url.substring(0,3) === "qrc" || url.substring(0,4) === "file"
0087             || url.substring(0,1) === ":") {
0088             json = jsonFile.read(url);
0089             if (json !== "")
0090                 return parseString(json, validateFunc);
0091         } else if (url.substring(0,4) === "http")
0092             error("http:// scheme not yet implemented");
0093         else // unknown url scheme
0094             error("Unknown url scheme in url parameter: " + url);
0095         return null;
0096     }
0097 }