9172 Remove dependency on QtScript

* #9172 Update json encoding/decoding to avoid QtScript
* Janitor: remove unused debug code
* Janitor: minor cleanup
* Remove dependencies to Qt Script

Co-authored-by: Magne Sjaastad <magne.sjaastad@ceetronsolutions.com>
This commit is contained in:
Kristian Bendiksen
2022-10-18 10:07:16 +02:00
committed by GitHub
parent 760bfaeec2
commit 806c9af82b
6 changed files with 17 additions and 156 deletions

View File

@@ -16,15 +16,12 @@
//
/////////////////////////////////////////////////////////////////////////////////
// Json parser based on code example found on:
// http://stackoverflow.com/questions/4169988/easiest-way-to-parse-json-in-qt-4-7
#include "RifJsonEncodeDecode.h"
#include <QtCore/QFile>
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
#include <QtCore/QString>
#include <QtScript/QScriptEngine>
#include <QtScript/QScriptValueIterator>
namespace ResInsightInternalJson
{
@@ -35,117 +32,25 @@ QMap<QString, QVariant> JsonReader::decodeFile( QString filePath )
file.open( QIODevice::ReadOnly );
QByteArray byteArray = file.readAll();
file.close();
QString jsonString( byteArray );
Json json;
return json.decode( jsonString );
return Json::decode( byteArray );
}
#if IMPL_DUMP_TO_FILE
void JsonReader::dumpToFile( std::vector<cvf::Vec3d>& points, QString filePath )
{
QFile file;
file.setFileName( filePath );
file.open( QIODevice::WriteOnly );
for ( size_t idx = 0; idx < points.size(); idx++ )
{
cvf::Vec3d point = points[idx];
QString string;
string.sprintf( "(%0.10e, %0.10e, %0.10e)\n", point.x(), point.y(), point.z() );
QByteArray byteArray( string.toLatin1() );
file.write( byteArray );
}
file.close();
}
#endif
QString Json::encode( const QMap<QString, QVariant>& map, bool prettify )
{
QScriptEngine engine;
if ( prettify )
{
engine.evaluate( "function toString() { return JSON.stringify(this, null, ' ') }" );
}
else
{
engine.evaluate( "function toString() { return JSON.stringify(this) }" );
}
QJsonDocument doc( QJsonObject::fromVariantMap( map ) );
QScriptValue toString = engine.globalObject().property( "toString" );
QScriptValue obj = encodeInner( map, &engine );
return toString.call( obj ).toString();
QJsonDocument::JsonFormat format = prettify ? QJsonDocument::JsonFormat::Indented : QJsonDocument::JsonFormat::Compact;
return doc.toJson( format );
}
QMap<QString, QVariant> Json::decode( const QString& jsonStr )
{
QScriptValue object;
QScriptEngine engine;
object = engine.evaluate( "(" + jsonStr + ")" );
return decodeInner( object );
return Json::decode( jsonStr.toUtf8() );
}
QScriptValue Json::encodeInner( const QMap<QString, QVariant>& map, QScriptEngine* engine )
QMap<QString, QVariant> Json::decode( const QByteArray& byteArray )
{
QScriptValue obj = engine->newObject();
QMapIterator<QString, QVariant> i( map );
while ( i.hasNext() )
{
i.next();
if ( i.value().type() == QVariant::String )
obj.setProperty( i.key(), i.value().toString() );
else if ( i.value().type() == QVariant::Int )
obj.setProperty( i.key(), i.value().toInt() );
else if ( i.value().type() == QVariant::Double )
obj.setProperty( i.key(), i.value().toDouble() );
else if ( i.value().type() == QVariant::List )
obj.setProperty( i.key(), qScriptValueFromSequence( engine, i.value().toList() ) );
else if ( i.value().type() == QVariant::Map )
obj.setProperty( i.key(), encodeInner( i.value().toMap(), engine ) );
}
return obj;
return QJsonDocument::fromJson( byteArray ).object().toVariantMap();
}
QMap<QString, QVariant> Json::decodeInner( QScriptValue object )
{
QMap<QString, QVariant> map;
QScriptValueIterator it( object );
while ( it.hasNext() )
{
it.next();
if ( it.value().isArray() )
map.insert( it.name(), QVariant( decodeInnerToList( it.value() ) ) );
else if ( it.value().isNumber() )
map.insert( it.name(), QVariant( it.value().toNumber() ) );
else if ( it.value().isString() )
map.insert( it.name(), QVariant( it.value().toString() ) );
else if ( it.value().isNull() )
map.insert( it.name(), QVariant() );
else if ( it.value().isObject() )
map.insert( it.name(), QVariant( decodeInner( it.value() ) ) );
}
return map;
}
QList<QVariant> Json::decodeInnerToList( QScriptValue arrayValue )
{
QList<QVariant> list;
QScriptValueIterator it( arrayValue );
while ( it.hasNext() )
{
it.next();
if ( it.name() == "length" ) continue;
if ( it.value().isArray() )
list.append( QVariant( decodeInnerToList( it.value() ) ) );
else if ( it.value().isNumber() )
list.append( QVariant( it.value().toNumber() ) );
else if ( it.value().isString() )
list.append( QVariant( it.value().toString() ) );
else if ( it.value().isNull() )
list.append( QVariant() );
else if ( it.value().isObject() )
list.append( QVariant( decodeInner( it.value() ) ) );
}
return list;
}
} // namespace ResInsightInternalJson
} // namespace ResInsightInternalJson