/// <summary> /// 将客户端的文件上传到服务器 /// </summary> /// <param name="clientFileName"></param> /// <returns></returns> public static String SaveFileToServer(System.Web.UI.WebControls.FileUpload file1) { String result = String.Empty; try { if (file1.HasFile) { String clientFileName = file1.FileName; String dir1 = "/Attachment/UseAttachment/"; HttpServerUtility server1 = System.Web.HttpContext.Current.Server; if (Directory.Exists(server1.MapPath(dir1)) == false) { Directory.CreateDirectory(server1.MapPath(dir1)); } String ext = Path.GetExtension(clientFileName); dir1 = dir1 + JString.GetUnique32ID() + ext; file1.SaveAs(server1.MapPath(dir1)); result = dir1; } } catch (Exception err) { result = String.Empty; } return(result); }
public void TestFromJson() { JString jstring = new JString("*"); WildCardContainer <string> s = WildCardContainer <string> .FromJson(jstring, u => u.AsString()); s.Should().BeEmpty(); jstring = new JString("hello world"); Action action = () => WildCardContainer <string> .FromJson(jstring, u => u.AsString()); action.Should().Throw <FormatException>(); JObject alice = new JObject(); alice["name"] = "alice"; alice["age"] = 30; JArray jarray = new JArray { alice }; WildCardContainer <string> r = WildCardContainer <string> .FromJson(jarray, u => u.AsString()); r[0].Should().Be("{\"name\":\"alice\",\"age\":30}"); JBoolean jbool = new JBoolean(); action = () => WildCardContainer <string> .FromJson(jbool, u => u.AsString()); action.Should().Throw <FormatException>(); }
private static string TTL(string text) { List <string> lines = new List <string>(); foreach (string fLine in StringTools.Tokenize(text, "\r\n")) { string line = fLine; line = JString.ToJString(line, true, false, false, true, false); if (1000 < line.Length) { line = line.Substring(0, 990) + " ..."; } if (line != "") { lines.Add(line); } if (1000 < lines.Count) { break; } } return(string.Join("\n", lines)); }
public JString toJString() { global::System.IntPtr cPtr = JNIPINVOKE.JObject_toJString(swigCPtr); JString ret = (cPtr == global::System.IntPtr.Zero) ? null : new JString(cPtr, false); return(ret); }
public void TestToJson() { NEP6Contract nep6Contract = new NEP6Contract() { Script = new byte[] { 0x00, 0x01 }, ParameterList = new ContractParameterType[] { ContractParameterType.Boolean, ContractParameterType.Integer }, ParameterNames = new string[] { "param1", "param2" }, Deployed = false }; JObject @object = nep6Contract.ToJson(); JString jString = (JString)@object["script"]; jString.Value.Should().Be(nep6Contract.Script.ToHexString()); JBoolean jBoolean = (JBoolean)@object["deployed"]; jBoolean.Value.Should().BeFalse(); JArray parameters = (JArray)@object["parameters"]; parameters.Count.Should().Be(2); jString = (JString)(parameters[0]["name"]); jString.Value.Should().Be("param1"); jString = (JString)(parameters[0]["type"]); jString.Value.Should().Be(ContractParameterType.Boolean.ToString()); jString = (JString)(parameters[1]["name"]); jString.Value.Should().Be("param2"); jString = (JString)(parameters[1]["type"]); jString.Value.Should().Be(ContractParameterType.Integer.ToString()); }
/// </summary> /// <param name="newPassWord"></param> /// <returns></returns> public bool UpdatePassWord(String UserName, String oldPassWord, String newPassWord) { bool succ = false; if (String.IsNullOrEmpty(UserName) == false) { JTable tab1 = new JTable(TableName); List <SearchField> condition = new List <SearchField>(); condition.Add(new SearchField("UserName", UserName)); DataSet ds1 = tab1.SearchData(condition, 1, "*"); if (ds1 != null && ds1.Tables[0].Rows.Count > 0) { DataRow dr1 = ds1.Tables[0].Rows[0]; if (JString.MD5(oldPassWord) == dr1["password"].ToString()) { succ = true; dr1["password"] = JString.MD5(newPassWord); tab1.Update(ds1.Tables[0]); } } ds1.Dispose(); tab1.Close(); } return(succ); }
public static string GetFairFullPath(string path) { using (WorkingDir wd = new WorkingDir()) { string argsFile = wd.MakePath(); string outFile = wd.MakePath(); string molp = SecurityTools.MakePassword_9(); string[] args = { "//O", outFile, "//MOLP", molp, "//-E", "//$", JString.AsLine(path), }; File.WriteAllLines(argsFile, args, StringTools.ENCODING_SJIS); ProcessTools.Start(@"C:\Factory\Bodewig\DenebolaToolkit\FairFullPath.exe", "//R \"" + argsFile + "\"").WaitForExit(); string[] outLines = File.ReadAllLines(outFile, StringTools.ENCODING_SJIS) .Where(v => v.StartsWith(molp)) .Select(v => v.Substring(molp.Length)).ToArray(); if (outLines.Length != 1) { throw new Exception("不正なパス文字列です。"); } return(outLines[0]); } }
public void TestParse() { TextReader tr = new StringReader("\"hello world\""); String s = JString.Parse(tr).Value; Assert.AreEqual("hello world", s); tr = new StringReader("hello world"); Assert.ThrowsException <FormatException>(() => JString.Parse(tr)); tr = new StringReader("\"\\s\""); Assert.ThrowsException <FormatException>(() => JString.Parse(tr)); tr = new StringReader("\"\\\"\\\\\\/\\b\\f\\n\\r\\t\""); s = JString.Parse(tr).Value; Assert.AreEqual("\"\\/\b\f\n\r\t", s); tr = new StringReader("\"\\u0030\""); s = JString.Parse(tr).Value; Assert.AreEqual("0", s); tr = new StringReader("\"a"); Assert.ThrowsException <FormatException>(() => JString.Parse(tr)); byte[] byteArray = new byte[] { 0x22, 0x01, 0x22 }; tr = new StringReader(System.Text.Encoding.ASCII.GetString(byteArray)); Assert.ThrowsException <FormatException>(() => JString.Parse(tr)); }
public void JTokenToStringPressedTest() { JNumber n = new JNumber(7.3); JNumber n2 = new JNumber(42); JNumber n3 = new JNumber(3.14); JString s = new JString("example"); JBool b = new JBool(true); JNull nu = new JNull(); JArray aa = new JArray(); JToken root = new JToken(); JToken t = new JToken(); JToken tt = new JToken(); JRoot r = new JRoot(); r["mnau"] = root; root["dalsi cislo"] = n; root["token"] = t; t["inside"] = aa; t["string"] = s; aa.Add(n2); aa.Add(b); aa.Add(tt); tt["cislo"] = n3; tt["nil"] = (nu); try { aa.Add(nu); } catch (JsonDuplicatedException e) { Console.WriteLine("zkusili jsme pridat podruhe"); } Console.WriteLine(root.ToStringPressed()); Console.WriteLine(root.ToString()); Console.WriteLine(r.ToStringPressed()); Console.WriteLine(r.ToString()); }
public void JStringFillTest() { JString s = new JString("Value"); Assert.IsNotNull(s); Assert.AreEqual("Value", s.Value); }
/// <summary> /// 功能说明:更新密码 /// </summary> /// <param name="oldpass">旧密码</param> /// <param name="newPass">新密码</param> /// <returns></returns> public String ChangeOldPassWord(String UserID, String oldpass, String newPass) { String error = String.Empty; if (String.IsNullOrEmpty(oldpass) == false && String.IsNullOrEmpty(newPass) == false) { JUserDA da1 = new JUserDA(); List <SearchField> condition = new List <SearchField>(); condition.Add(new SearchField("UserID", UserID)); DataRow dr1 = da1.GetFirstDataRow(condition, "*"); if (dr1 != null) { String pass0 = dr1["password"].ToString().Trim(); String pass1 = oldpass; String pass2 = JString.MD5(pass1); if (pass1 == pass0 || pass2 == pass0) { String pass3 = JString.MD5(newPass); Dictionary <string, object> data1 = new Dictionary <string, object>(); data1["password"] = pass3; da1.EditData(condition, data1); } else { error = "提示:老密码输入不正确,请重新输入!"; } } } return(error); }
public void JTokenToStringPressedTest() { JArray a = new JArray("test"); JNumber n = new JNumber("number", 7.3); JString s = new JString("string", "example"); JBool b = new JBool("bool", true); JNull nu = new JNull("nil"); JArray aa = new JArray("inside"); JToken root = new JToken("root"); JToken t = new JToken("token"); JToken tt = new JToken("token2"); aa.Value.Add(n); aa.Value.Add(b); tt.Value.Add(b); tt.Value.Add(nu); aa.Value.Add(tt); a.Value.Add(s); a.Value.Add(aa); a.Value.Add(n); t.Value.Add(aa); t.Value.Add(s); root.Value.Add(n); root.Value.Add(t); Console.WriteLine(root.ValueToStringPressed()); Assert.AreEqual("{\"number\":7.3,\"token\":{\"inside\":[7.3,true,{\"bool\":true,\"nil\":null}],\"string\":\"example\"}}", root.ValueToStringPressed()); }
public void JTokenToStringTest() { JArray a = new JArray("test"); JNumber n = new JNumber("number", 7.3); JString s = new JString("string", "example"); JBool b = new JBool("bool", true); JNull nu = new JNull("nil"); JArray aa = new JArray("inside"); JToken root = new JToken("root"); JToken t = new JToken("token"); JToken tt = new JToken("token2"); aa.Value.Add(n); aa.Value.Add(b); tt.Value.Add(b); tt.Value.Add(nu); aa.Value.Add(tt); a.Value.Add(s); a.Value.Add(aa); a.Value.Add(n); t.Value.Add(aa); t.Value.Add(s); root.Value.Add(n); root.Value.Add(t); Console.WriteLine(root.ValueToString(0)); Assert.Fail(); }
public IActionResult GetBlockHeader(string hash, int index, bool verbose = false) { JObject key; Header header; if (hash != null) { key = new JString(hash); UInt256 _hash = UInt256.Parse(key.AsString()); header = Blockchain.Singleton.View.GetHeader(_hash); } else { key = new JNumber(index); uint height = uint.Parse(key.AsString()); header = Blockchain.Singleton.GetHeader(height); } if (header == null) { throw new RestException(-100, "Unknown block"); } if (verbose) { JObject json = header.ToJson(); json["confirmations"] = Blockchain.Singleton.Height - header.Index + 1; UInt256 _hash = Blockchain.Singleton.GetNextBlockHash(header.Hash); if (_hash != null) { json["nextblockhash"] = _hash.ToString(); } return(FormatJson(json)); } return(FormatJson(header.ToArray().ToHexString())); }
public void JArrayToStringTest() { JArray a = new JArray(); JNumber n = new JNumber(42); JNumber n2 = new JNumber(7.3); JString s = new JString("pokus"); JString s2 = new JString("pokus2"); JBool b = new JBool(true); JBool b2 = new JBool(false); JNull nu = new JNull(); JNull nu2 = new JNull(); JNull nu3 = new JNull(); JToken t = new JToken(); JRoot root = new JRoot(); root["pole"] = a; a.Add(n); a.Add(s); a.Add(b); a.Add(nu); a.Add(t); t["string"] = s2; t["nill"] = nu2; t["cislo"] = n2; Console.WriteLine(a.ToString()); JArray aa = new JArray(); a.Add(aa); aa.Add(nu3); aa.Add(b2); Console.WriteLine(a.ToString()); }
internal JValue parseValue() { char chr = stringPointer.getNextNonWhiteChar(); if (chr == '"') { return(JString.zParse(this, false)); } else if (chr == '-' || (chr >= '0' && chr <= '9')) { return(JNumber.zParse(this, chr)); } else if (chr == '{') { return(JSON.zParse(this, false, false, false)); } else if (chr == '[') { return(JArray.zParse(this, false)); } else if (chr == 't' || chr == 'f') { return(JBoolean.zParse(this, (chr == 't'))); } else if (chr == 'n') { return(JNull.zParse(this)); } else { throw ParseException.forInvalidCharacter("Invalid character '" + chr + "' when expecting start of any value", this); } }
public static string AccessKey(string accessKey) { accessKey = JString.ToJString(accessKey, true, false, false, true).Trim(); Utilities.CheckLength(accessKey, 1, Consts.ACCESS_KEY_LEN_MAX, "アクセスキー"); return(accessKey); }
public static string GroupName(string name) { name = JString.ToJString(name, true, false, false, true).Trim(); Utilities.CheckLength(name, 1, Consts.GROUP_NAME_LEN_MAX, "グループ名"); return(name); }
public void JStringValueToStrinTest() { JString s = new JString("", "Value"); Assert.IsNotNull(s); Console.WriteLine(s.ValueToString(0)); Assert.AreEqual("\"Value\"", s.ValueToString(0)); }
public void TestConstructor() { String s = "hello world"; JString jstring = new JString(s); Assert.AreEqual(s, jstring.Value); Assert.ThrowsException <ArgumentNullException>(() => new JString(null)); }
public void ParsesQuotations() { var empty = Tokenize("\"\""); var filled = Tokenize("\"abc \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\u263a def\""); var expected = new JString("abc \" \\ / \b \f \n \r \t ☺ def"); Json.Parses(empty).WithValue(new JString("")); Json.Parses(filled).WithValue(expected); }
public void JStringToStringPressedTest() { JString s = new JString("Value"); Assert.IsNotNull(s); Assert.AreEqual("Value", s.Value); Console.WriteLine(s.ToString()); Assert.AreEqual("\"Value\"", s.ToString()); }
public void TestAsBoolean() { String s1 = "hello world"; String s2 = ""; JString jstring1 = new JString(s1); JString jstring2 = new JString(s2); Assert.AreEqual(true, jstring1.AsBoolean()); Assert.AreEqual(false, jstring2.AsBoolean()); }
// ================================================================================= // Import // --------------------------------------------------------------------------------- public static bool Import(iCS_VisualScriptData storage, string path) { // -- Decode JSON string. -- JObject root = JSONFile.Read(path); if (root == null || root.isNull) { Debug.LogWarning("iCanScript: Import failure: JSON file corrupted."); return(false); } // -- Extract version information. -- var cache = new iCS_VisualScriptData(); JNumber majorVersion = root.GetValueFor("Storage.MajorVersion") as JNumber; JNumber minorVersion = root.GetValueFor("Storage.MinorVersion") as JNumber; JNumber bugFixVersion = root.GetValueFor("Storage.BugFixVersion") as JNumber; cache.MajorVersion = (int)majorVersion.value; cache.MinorVersion = (int)minorVersion.value; cache.BugFixVersion = (int)bugFixVersion.value; // -- Extract visual script attributes. -- JBool isEditorScript = root.GetValueFor("Storage.IsEditorScript") as JBool; JString csharpFileName = root.GetValueFor("Storage.CSharpFileName") as JString; JBool baseTypeOverride = root.GetValueFor("Storage.BaseTypeOverride") as JBool; JString baseType = root.GetValueFor("Storage.BaseType") as JString; JString sourceFileGUID = root.GetValueFor("Storage.SourceFileGUID") as JString; cache.IsEditorScript = isEditorScript.value; cache.CSharpFileName = csharpFileName.value; cache.BaseTypeOverride = baseTypeOverride.value; cache.BaseType = baseType.value; cache.SourceFileGUID = sourceFileGUID.value; // -- Extract engine objects. -- JArray engineObjects = root.GetValueFor("Storage.EngineObjects") as JArray; if (engineObjects == null) { Debug.LogWarning("iCanScript: Import failure: Unable to locate engine array."); return(false); } cache.EngineObjects.Capacity = engineObjects.value.Length; foreach (var eobj in engineObjects.value) { var newObj = ReadEngineObject(eobj as JObject); if (newObj != null) { cache.EngineObjects.Add(newObj); } else { Debug.LogWarning("iCanScript: Unable to create instance of iCS_EngineObject"); } } cache.CopyTo(storage); return(true); }
public void TestGetEnum() { JString s = "James"; Woo woo = s.GetEnum <Woo>(); Assert.AreEqual(Woo.James, woo); s = ""; woo = s.AsEnum(Woo.Jerry, false); Assert.AreEqual(Woo.Jerry, woo); }
public void TestTryGetEnum() { JString s = new JString("Signature"); ContractParameterType cp = s.TryGetEnum <ContractParameterType>(ContractParameterType.Void, false); Assert.AreEqual(ContractParameterType.Signature, cp); s = new JString(""); cp = s.TryGetEnum <ContractParameterType>(ContractParameterType.Void, false); Assert.AreEqual(ContractParameterType.Void, cp); }
public void TestAsNumber() { string s1 = "hello world"; string s2 = "123"; string s3 = ""; JString jstring1 = new JString(s1); JString jstring2 = new JString(s2); JString jstring3 = new JString(s3); Assert.AreEqual(double.NaN, jstring1.AsNumber()); Assert.AreEqual(123, jstring2.AsNumber()); Assert.AreEqual(0, jstring3.AsNumber()); }
public void JStringToStringPressedTest() { JString s = new JString("test") { Value = "Value" }; Assert.IsNotNull(s); Assert.AreEqual("test", s.Name); Assert.AreEqual("Value", s.Value); Console.WriteLine(s.ToStringPressed()); Assert.AreEqual("\"test\":\"Value\"", s.ToStringPressed()); }
private void btnImport_Click(object sender, EventArgs e) { try { string keyFile = SaveLoadDialogs.LoadFile( "鍵ファイルを選択してください", "鍵:unreal-remo-key", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "default.unreal-remo-key" ); if (keyFile != null) { XNode root = XNode.load(keyFile); string ident = root.get("Ident").value; string key = root.get("Key").value; string hash = root.get("Hash").value; if (ident != JString.toJString(ident, false, false, false, false)) { throw new FailedOperation("鍵ファイルが壊れています。(Ident format)"); } if (ident.Length < 1 || 100 < ident.Length) // HACK: 上限適当 { throw new FailedOperation("鍵ファイルが壊れています。(Ident length)"); } if (StringTools.hex(key).Length != 64) { throw new FailedOperation("鍵ファイルが壊れています。(Key length)"); } if (hash != Ground.KeyData.getHash(key)) { throw new FailedOperation("鍵ファイルが壊れています。(Hash)"); } txtIdent.Text = ident; txtRaw.Text = key; txtHash.Text = hash; throw new Completed("鍵をインポートしました。"); } } catch (Exception ex) { FailedOperation.caught(ex); } }
// ================================================================================= // Software Update Verification Support Functions. // --------------------------------------------------------------------------------- // Returns the version string of the latest available release. static Version GetLatestReleaseId(out string downloadUrl, float waitTime = 2f) { downloadUrl = null; var url = URL_VersionFile; var download = iCS_WebUtils.WebRequest(url, waitTime); if (!String.IsNullOrEmpty(download.error)) { return(null); } #if DEBUG_INFO Debug.Log(download.text); #endif JNumber jMajor = null; JNumber jMinor = null; JNumber jBugFix = null; try { JObject rootObject = JSON.JSON.GetRootObject(download.text); JObject latestVersion = rootObject.GetValueFor("iCanScript") as JObject; if (!latestVersion.isNull) { jMajor = latestVersion.GetValueFor("major") as JNumber; jMinor = latestVersion.GetValueFor("minor") as JNumber; jBugFix = latestVersion.GetValueFor("bugFix") as JNumber; JString jDownloadUrl = rootObject.GetValueFor("downloadUrl") as JString; if (jDownloadUrl != null) { downloadUrl = jDownloadUrl.value; } #if DEBUG_INFO else { Debug.Log("iCanScript: Unable to determine the download URL"); Debug.Log("iCanScript: JSON root object is: " + rootObject.Encode()); } #endif } } #if DEBUG_INFO catch (System.Exception e) { Debug.LogWarning("iCanScript: JSON exception: " + e.Message); } #else catch (System.Exception) {} #endif if (jMajor == null || jMinor == null || jBugFix == null) { return(null); } return(new Version((int)jMajor.value, (int)jMinor.value, (int)jBugFix.value)); }
/// <summary> /// Parse a JSON string to a doufu json object /// </summary> /// <param name="sJSON">JSON string</param> /// <param name="bAllowNonStandardVariableName">True to allow non-standard variable name, for example {"foo\0\nfoo":"str"} is allowed. /// Otherwise incorrect format exception will be thrown.</param> /// <returns>Return a doufu json object</returns> public static JSONObject Parse(string sJSON, bool bAllowNonStandardVariableName) { sJSON = sJSON.Trim(); // indicate current json is array format bool isArray = false; if (sJSON[0] == BRACKET_START) { if (sJSON[sJSON.Length - 1] != BRACKET_END) { throw new Exception("Incorrect format, json starts with { but not ends with }"); } } else if (sJSON[0] == BRACE_START) { if (sJSON[sJSON.Length - 1] != BRACE_END) { throw new Exception("Incorrect format, json starts with [ but not ends with ]"); } isArray = true; } else { throw new Exception("Incorrect format, json should starts with { or ["); } // remove brackets sJSON = sJSON.Substring(1, sJSON.Length - 2); sJSON = sJSON.Trim(); JObject jsonRet = new JObject(); JArray jsonArrRet = new JArray(); Regex reVariableName = new Regex(@"^[""|'][a-zA-Z$]+[a-zA-Z0-9_\$]*[""|']$", RegexOptions.None); if (bAllowNonStandardVariableName) { reVariableName = new Regex(@"^[""|'].*[""|']$", RegexOptions.None); } Regex reIsLetter = new Regex(@"^[a-zA-Z]*$", RegexOptions.None); Regex reIsNumberChar = new Regex(@"^-?[0-9]*$", RegexOptions.None); Regex reIsNumber = new Regex(@"^-?[0-9]+$", RegexOptions.None); string sVariableName = string.Empty; JSONObject oVariableValue; ParsingStatus iStatus = ParsingStatus.Unstarted; Collection<char> cStartSymbs = new Collection<char>(); Collection<char> cEndSymbs = new Collection<char>(); if (isArray) { iStatus = ParsingStatus.ExpectVariableValue | ParsingStatus.ExpectStartBracket | ParsingStatus.ExpectStartBrace; } else { iStatus = ParsingStatus.ExpectVariableName; } // indicate whether the last loop exited with error. // if there were error, the iConditionMet would be 0 int iConditionMet = 1; for (int i = 0; i < sJSON.Length; ) { if (iConditionMet <= 0) { throw new Exception("Incorrect format: Expected " + iStatus.ToString() + " position: " + i.ToString()); } else { iConditionMet = 0; } if (iStatus == (iStatus | ParsingStatus.ExpectStartBracket)) { // is start symbol? if (BRACKET_START == sJSON[i]) { StringBuilder sInnerJSON = new StringBuilder(); int iBracketCounter = 0; int j; for (j = i; j < sJSON.Length; j++) { sInnerJSON.Append(sJSON[j]); if (sJSON[j] == BRACKET_START) { iBracketCounter++; } else if (sJSON[j] == BRACKET_END) { iBracketCounter--; } if (iBracketCounter == 0) { break; } } oVariableValue = Parse(sInnerJSON.ToString()); // add value if (isArray) { jsonArrRet.Value.Add(oVariableValue); } else { jsonRet.Items.Add(sVariableName, oVariableValue); } i = ++j; iStatus = ParsingStatus.ExpectCommas | ParsingStatus.ExpectEOS | ParsingStatus.ExpectBlank; iConditionMet++; continue; } } if (iStatus == (iStatus | ParsingStatus.ExpectEndBracket)) { } if (iStatus == (iStatus | ParsingStatus.ExpectStartBrace)) { // check if it is "[" if (BRACE_START == sJSON[i]) { StringBuilder sInnerJSON = new StringBuilder(); int iBracketCounter = 0; int j; for (j = i; j < sJSON.Length; j++) { sInnerJSON.Append(sJSON[j]); if (sJSON[j] == BRACE_START) { iBracketCounter++; } else if (sJSON[j] == BRACE_END) { iBracketCounter--; } if (iBracketCounter == 0) { break; } } oVariableValue = Parse(sInnerJSON.ToString()); // add value if (isArray) { jsonArrRet.Value.Add(oVariableValue); } else { jsonRet.Items.Add(sVariableName, oVariableValue); } i = ++j; iStatus = ParsingStatus.ExpectCommas | ParsingStatus.ExpectEOS | ParsingStatus.ExpectBlank; iConditionMet++; continue; } } if (iStatus == (iStatus | ParsingStatus.ExpectEndBrace)) { } if (iStatus == (iStatus | ParsingStatus.ExpectVariableName)) { StringBuilder sName = new StringBuilder(); string sActualName; bool bBroke = false; int j; for (j = i; j < sJSON.Length; j++) { if (sJSON[j] == NAME_VALUE_SEPARATOR) { bBroke = true; break; } sName.Append(sJSON[j]); } sActualName = sName.ToString(); sActualName = sActualName.Trim(); if (reVariableName.IsMatch(sActualName.ToString()) && bBroke == true) { // TODO: string escape sActualName = sActualName.Substring(1, sActualName.Length - 2); sVariableName = sActualName; i = ++j; iStatus = ParsingStatus.ExpectVariableValue | ParsingStatus.ExpectStartBrace | ParsingStatus.ExpectStartBracket | ParsingStatus.ExpectBlank; iConditionMet++; continue; } } if (iStatus == (iStatus | ParsingStatus.ExpectVariableValue)) { if (sJSON[i] == '"' || sJSON[i] == '\'') { StringBuilder sValue = new StringBuilder(); bool bBroke = false; int j; for (j = i + 1; j < sJSON.Length; j++) { if (sJSON[j] == sJSON[i] && sJSON[j - 1] != '\\') { bBroke = true; break; } // process escaped unicode if (sJSON[j] == '\\') { if (j + 5 < sJSON.Length && sJSON[j+1] == 'u') { string hex = sJSON.Substring(j + 2, 4); sValue.Append((char)Int16.Parse(hex, System.Globalization.NumberStyles.HexNumber)); j += 5; continue; } } sValue.Append(sJSON[j]); } if (bBroke == true) { string sFinalValue = sValue.ToString(); sFinalValue = sFinalValue.Replace("\\\"", "\""); sFinalValue = sFinalValue.Replace("\\\'", "\'"); oVariableValue = new JString(sFinalValue); // add value if (isArray) { jsonArrRet.Value.Add(oVariableValue); } else { jsonRet.Items.Add(sVariableName, oVariableValue); } i = j + 1; iStatus = ParsingStatus.ExpectEOS | ParsingStatus.ExpectCommas | ParsingStatus.ExpectBlank; iConditionMet++; continue; } } else if (reIsLetter.IsMatch(sJSON[i].ToString())) { StringBuilder sBool = new StringBuilder(); bool bFound = false; int j; for (j = 0; j < 5; j++) { sBool.Append(sJSON[i + j]); if (j == 3 && sBool.ToString() == "true") { bFound = true; break; } else if (j == 4 && sBool.ToString() == "false") { bFound = true; break; } } if (bFound == true) { oVariableValue = new JBoolean(bool.Parse(sBool.ToString())); // add value if (isArray) { jsonArrRet.Value.Add(oVariableValue); } else { jsonRet.Items.Add(sVariableName, oVariableValue); } i += j + 1; iStatus = ParsingStatus.ExpectEOS | ParsingStatus.ExpectCommas | ParsingStatus.ExpectBlank; iConditionMet++; continue; } } else if (reIsNumberChar.IsMatch(sJSON[i].ToString())) { // check if negative number if (sJSON[i].ToString() == "-" && !reIsNumber.IsMatch(sJSON[i].ToString() + sJSON[i + 1].ToString())) { break; } StringBuilder sNumber = new StringBuilder(); int j; for (j = i; j < sJSON.Length; j++) { if (reIsNumberChar.IsMatch(sJSON[j].ToString())) { sNumber.Append(sJSON[j]); } else { if (sJSON[j] != '.') { break; } sNumber.Append(sJSON[j]); } } if (j == sJSON.Length || sJSON[j] == ',' || sJSON[j] == ' ') { oVariableValue = new JNumber(Int32.Parse(sNumber.ToString())); // add value if (isArray) { jsonArrRet.Value.Add(oVariableValue); } else { jsonRet.Items.Add(sVariableName, oVariableValue); } i = j; iStatus = ParsingStatus.ExpectEOS | ParsingStatus.ExpectCommas | ParsingStatus.ExpectBlank; iConditionMet++; continue; } } } if (iStatus == (iStatus | ParsingStatus.ExpectBlank)) { if (i < sJSON.Length && sJSON[i] == ' ') { i++; iConditionMet++; continue; } } if (iStatus == (iStatus | ParsingStatus.ExpectCommas)) { if (i < sJSON.Length && sJSON[i] == ',') { i++; if (isArray) { iStatus = ParsingStatus.ExpectVariableValue | ParsingStatus.ExpectStartBracket | ParsingStatus.ExpectStartBrace | ParsingStatus.ExpectBlank; } else { iStatus = ParsingStatus.ExpectVariableName | ParsingStatus.ExpectBlank; } iConditionMet++; continue; } } if (iStatus == (iStatus | ParsingStatus.ExpectEOS)) { if (i == sJSON.Length) { iConditionMet++; continue; } } } if (isArray) { return jsonArrRet; } else { return jsonRet; } }
static void Main(string[] args) { if (false) { ///////////////////////// // Stringifier Test ///////////////////////// // implicity conversion JArray jArrTest = new JArray(); jArrTest.Value.Add("jArrTest primitive string"); Console.WriteLine(jArrTest.ToJSON()); JString jStrTest = null; jStrTest = "primitive string test"; Console.WriteLine(jStrTest.ToJSON()); // Null tests JString jstr = new JString(null); Console.WriteLine(jstr.ToJSON()); // string with a backward slash JString jstrslash = new JString("\\\\n\n"); JObject jobjslash = new JObject(); jobjslash.Items.Add("\r\n\\\n", jstrslash); Console.WriteLine(jobjslash.ToJSON()); // stringify a jstring that contain break line JString breakstr = new JString("abc \n cba"); Console.WriteLine(breakstr.ToJSON()); JObject jNullObj = new JObject(); jNullObj["test1"] = new JNumber(23); jNullObj["test2"] = null; jNullObj["test3"] = new JString(null); jNullObj["test4"] = new JArray(); ((JArray)jNullObj["test4"]).Value.Add(new JNumber(234)); ((JArray)jNullObj["test4"]).Value.Add(null); ((JArray)jNullObj["test4"]).Value.Add(new JString("sdf")); Console.WriteLine(jNullObj.ToJSON()); // Array tests JObject testObject = new JObject(); testObject.Items.Add("key1", new JBoolean(false)); testObject.Items.Add("key2", new JNumber(333)); JArray testArray = new JArray(new JSONObject[] { new JBoolean(false), new JBoolean(true), new JNumber(20), new JString("test"), testObject, new JNumber(0) }); Console.WriteLine(testArray.ToJSON()); // test JArray.this[int index] Console.WriteLine(((JNumber)testArray[2]).Value.ToString()); Console.WriteLine(((JNumber)testArray[2]).Value = 556); Console.WriteLine(testArray.ToJSON()); // test JArray.this[string key] testArray["alimali"] = new JString("alimali"); Console.WriteLine(testArray["alimali"].ToJSON()); Console.WriteLine(testArray.ToJSON()); // test implicit convert from int to JNumber Console.WriteLine((testArray[2] = (JNumber)234).ToJSON()); Console.WriteLine(testArray.ToJSON()); // test implicit convert from string to JString Console.WriteLine((testArray[2] = (JString)"jstring converted!").ToJSON()); Console.WriteLine(testArray.ToJSON()); } else { ///////////////////////// // Parser Test ///////////////////////// // unicode tests JArray unicode1 = (JArray)Helpers.Parse(@"['HR\u9762\u8bd5',3,3,4]"); // array tests JArray array = (JArray)Helpers.Parse(@"[1,3,3,4]"); JObject array2 = (JObject)Helpers.Parse(@"{'Processes':['20ed6436-5b44-47f8-8642-1184811d4a99']}"); JObject array3 = (JObject)Helpers.Parse(@"{'Processes':['20ed6436-5b44-47f8-8642-1184811d4a99','20ed6436-5b44-47f8-8642-1184811d4a99']}"); JObject array4 = (JObject)Helpers.Parse(@"{'name': 'asfdasf', 'items': [{'name': 'HR\u9762\u8bd5'},{'name': '\u4f53\u68c0'},{'name': '\u5165\u804c'},{'name': '\u5ba2\u6237\u9762\u8bd5'},{'name': '\u7b7e\u7f72OFFER'},{'name': '\u90e8\u95e8\u9762\u8bd5'}]}"); // positive tests JObject p_number1 = (JObject)Helpers.Parse(@"{""test"":23423}"); JObject p_number2_blank = (JObject)Helpers.Parse(@" { ""test"" : 23423 } "); JObject p_number3 = (JObject)Helpers.Parse(@"{""test"":-23}"); // negative number JObject p_string1 = (JObject)Helpers.Parse(@"{""test"":""23423""}"); JObject p_string2 = (JObject)Helpers.Parse(@"{""test"":'23423'}"); JObject p_string3 = (JObject)Helpers.Parse(@"{""test"":'23423\0'}"); JObject p_string4 = (JObject)Helpers.Parse(@"{""test"":'23""423\0'}"); JObject p_string5 = (JObject)Helpers.Parse(@"{""test"":""23'423\0""}"); JObject p_string6 = (JObject)Helpers.Parse(@"{""test"":""23\""423\0""}"); JObject p_string7 = (JObject)Helpers.Parse(@"{""test"":'23\""423\0'}"); JObject p_bool1 = (JObject)Helpers.Parse(@"{""test"":false}"); JObject p_bool2 = (JObject)Helpers.Parse(@"{""test"":true}"); // variable name tests JObject p_variable1 = (JObject)Helpers.Parse(@"{""test"":true}"); JObject p_variable2 = (JObject)Helpers.Parse(@"{'test':false}"); // TODO: multiple object JObject p_multipleObject1 = (JObject)Helpers.Parse(@"{""test"":23423,""test2"":234}"); JObject p_multipleObject2 = (JObject)Helpers.Parse(@"{""X"":350,""Y"":500,""Z"":9}"); // TODO: mixed types JObject p_mixTypes1 = (JObject)Helpers.Parse(@"{""test"":23423,""test2"":""sdf"",""test3"":false,""test4"":234}"); // TODO: dupilcated variable names // TODO: nested JObject p_nested1 = (JObject)Helpers.Parse(@"{""test"":{""test2"":234,""test3"":""sdf""}}"); JObject p_nested2 = (JObject)Helpers.Parse(@" { ""test"" : { ""test2"" : { ""test4"" : false } , ""test3"" : ""sdf"" } } "); // TODO: string escape test // Expected pass JObject p_variableNameEscape_1 = (JObject)Helpers.Parse(@" { ""t\nest"" : 23423 } ", true); JObject p_variableNameEscape_2 = (JObject)Helpers.Parse(@" { ""t\0est"" : 23423 } ", true); JObject p_variableNameEscape_3 = (JObject)Helpers.Parse(@" { ""t\0est"" : ""sdfsdf\0sdfsdf\""df"" } ", true); // Expected error JObject n_variableNameEscape_1 = (JObject)Helpers.Parse(@" { ""t\nest"" : 23423 } "); JObject n_variableNameEscape_2 = (JObject)Helpers.Parse(@" { ""t\0est"" : 23423 } ", false); // negative tests JObject n = (JObject)Helpers.Parse(@"{""test"":23423a}"); JObject n2 = (JObject)Helpers.Parse(@"{""test"":false1}"); JObject n3 = (JObject)Helpers.Parse(@"{""test':false1}"); } }