Implement the Json.encode and Json.decode methods

fixes #8393
This commit is contained in:
Gunnar Beutner 2015-02-09 08:12:42 +01:00
parent 67e50a3d47
commit bb12704a31
5 changed files with 68 additions and 8 deletions

View File

@ -223,6 +223,26 @@ Signature:
Returns the tangent of `x`.
## <a id="json-object"></a> Json object
The global `Json` object can be used to encode and decode JSON.
### <a id="json-encode"></a> Json.encode
Signature:
function encode(x);
Encodes an arbitrary value into JSON.
### <a id="json-decode"></a> Json.decode
Signature:
function decode(x);
Decodes a JSON string.
## <a id="number-type"></a> Number type
### <a id="number-to_string"></a> Number#to_string

View File

@ -25,7 +25,7 @@ mkclass_target(sysloglogger.ti sysloglogger.thpp)
set(base_SOURCES
application.cpp application-version.cpp application.thpp array.cpp array-script.cpp boolean.cpp boolean-script.cpp console.cpp context.cpp
convert.cpp debuginfo.cpp dictionary.cpp dictionary-script.cpp dynamicobject.cpp dynamicobject.thpp dynamictype.cpp
exception.cpp fifo.cpp filelogger.cpp filelogger.thpp initialize.cpp json.cpp logger.cpp logger.thpp math-script.cpp
exception.cpp fifo.cpp filelogger.cpp filelogger.thpp initialize.cpp json.cpp json-script.cpp logger.cpp logger.thpp math-script.cpp
netstring.cpp networkstream.cpp number.cpp number-script.cpp object.cpp object-script.cpp primitivetype.cpp process.cpp
ringbuffer.cpp scriptframe.cpp function.cpp function-script.cpp functionwrapper.cpp scriptglobal.cpp
scriptutils.cpp serializer.cpp socket.cpp stacktrace.cpp

46
lib/base/json-script.cpp Normal file
View File

@ -0,0 +1,46 @@
/******************************************************************************
* Icinga 2 *
* Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org) *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software Foundation *
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
******************************************************************************/
#include "base/dictionary.hpp"
#include "base/function.hpp"
#include "base/functionwrapper.hpp"
#include "base/scriptframe.hpp"
#include "base/initialize.hpp"
#include "base/json.hpp"
using namespace icinga;
static String JsonEncodeShim(const Value& value)
{
return JsonEncode(value);
}
static void InitializeJsonObj(void)
{
Dictionary::Ptr jsonObj = new Dictionary();
/* Methods */
jsonObj->Set("encode", new Function(WrapFunction(JsonEncodeShim)));
jsonObj->Set("decode", new Function(WrapFunction(JsonDecode)));
ScriptGlobal::Set("Json", jsonObj);
}
INITIALIZE_ONCE(InitializeJsonObj);

View File

@ -449,7 +449,7 @@ object:
context->m_Assign.push(NULL);
context->m_Ignore.push(NULL);
}
object_declaration identifier rterm use_specifier rterm_scope_require_side_effect
object_declaration identifier optional_rterm use_specifier rterm_scope_require_side_effect
{
context->m_ObjectAssign.pop();

View File

@ -89,12 +89,6 @@ ConfigItem::Ptr ConfigItemBuilder::Compile(void)
BOOST_THROW_EXCEPTION(std::invalid_argument(msgbuf.str()));
}
if (m_Name.IsEmpty()) {
std::ostringstream msgbuf;
msgbuf << "The name of an object may not be empty: " << m_DebugInfo;
BOOST_THROW_EXCEPTION(std::invalid_argument(msgbuf.str()));
}
std::vector<Expression *> exprs;
Array::Ptr templateArray = new Array();