52 lines
1.3 KiB
QML
52 lines
1.3 KiB
QML
|
/* JSONListModel - a QML ListModel with JSON and JSONPath support
|
||
|
*
|
||
|
* Copyright (c) 2012 Romain Pokrzywka (KDAB) (romain@kdab.com)
|
||
|
* Licensed under the MIT licence (http://opensource.org/licenses/mit-license.php)
|
||
|
*/
|
||
|
|
||
|
import QtQuick 2.0
|
||
|
import "../lib/jsonpath.js" as JSONPath
|
||
|
|
||
|
Item {
|
||
|
property string source: ""
|
||
|
property string json: ""
|
||
|
property string query: ""
|
||
|
|
||
|
property ListModel model : ListModel { id: jsonModel }
|
||
|
property alias count: jsonModel.count
|
||
|
|
||
|
onSourceChanged: {
|
||
|
var xhr = new XMLHttpRequest;
|
||
|
xhr.open("GET", source);
|
||
|
xhr.onreadystatechange = function() {
|
||
|
if (xhr.readyState == XMLHttpRequest.DONE)
|
||
|
json = xhr.responseText;
|
||
|
}
|
||
|
xhr.send();
|
||
|
}
|
||
|
|
||
|
onJsonChanged: updateJSONModel()
|
||
|
onQueryChanged: updateJSONModel()
|
||
|
|
||
|
function updateJSONModel() {
|
||
|
jsonModel.clear();
|
||
|
|
||
|
if ( json === "" )
|
||
|
return;
|
||
|
|
||
|
var objectArray = parseJSONString(json, query);
|
||
|
for ( var key in objectArray ) {
|
||
|
var jo = objectArray[key];
|
||
|
jsonModel.append( jo );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function parseJSONString(jsonString, jsonPathQuery) {
|
||
|
var objectArray = JSON.parse(jsonString);
|
||
|
if ( jsonPathQuery !== "" )
|
||
|
objectArray = JSONPath.jsonPath(objectArray, jsonPathQuery);
|
||
|
|
||
|
return objectArray;
|
||
|
}
|
||
|
}
|