Talk:LlJsonSetValue
Safe strings
Passing strings verbatim to llJsonSetValue or llList2Json is not safe. One way to escape strings properly to make them safe for use with both is to use this function:
string String2Json(string s)
{
return llGetSubString(llList2Json(JSON_OBJECT, [s,""]), 1, -5);
}
Examples:
llOwnerSay(String2Json(llUnescapeURL("%09"))); // outputs: Object: "\t"
llOwnerSay(String2Json("\n")); // outputs: Object: "\n"
llOwnerSay(String2Json("this \"string\" is not safe")); // outputs: Object: "this \"string\" is not safe"
llOwnerSay(String2Json("\"ab\"")); // outputs: Object: "\"ab\""
// Examples of use with the corresponding functions:
llOwnerSay(llJsonSetValue("[]", [0], String2Json("this \"string\" is not safe")));
llOwnerSay(llList2Json(JSON_ARRAY, [String2Json("this \"string\" is not safe")]));
// both output: Object: ["this \"string\" is not safe"]
--Sei Lisa 17:19, 6 June 2014 (PDT)
Sadly, even this isn't a complete solution. With a URL like "http://www.google.com/", you'll get a "leaning-toothpicks" style value, but a call to llJsonSetValue() still won't pack it in correctly. -- Lavanya Hartnell 7:45, 11 August 2014 (PDT)
- Works for me. Can you give an example? Mine was
llJsonSetValue("[]",[0],String2Json("http://www.google.com/"))
and it returned the correct JSON -- Sei Lisa 10:39, 11 September 2014 (PDT)
"null", "false" and "true" are interpreted as JSON null, false and true respectively. IMHO making most of the special identifiers somewhat pointless but importnatly increasing the amount of surface area of unsafe strings per Sei. Noticed that scientific notation is interpreted as a number as well.
Recommend having function description rewritten that value should be a JSON string or special identifier only to avoid further misunderstanding or confusion by scripters.
With a note that the function has some capability to wrap strings but that this is unsafe to rely on as strings could be interpreted to be a JSON string if they look like JSON such as looking like a number, scientific notation, null, true, false or start with a { or [ at the beginning of the string. This is because JSON that is a single value is technically valid JSON.
-- Nexii Malthus 12:57, 28 April 2024 (PDT)