diff --git a/OpenBullet/LSDoc.xml b/OpenBullet/LSDoc.xml
index 4bcc3be..4b0fa67 100644
--- a/OpenBullet/LSDoc.xml
+++ b/OpenBullet/LSDoc.xml
@@ -323,7 +323,7 @@ This will spawn and execute a Parse Block.
Syntax:
PARSE "TARGET" LR "LEFT" "RIGHT" [Recursive?] [EncodeOutput?] [CreateEmpty?] [UseRegexLR?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
PARSE "TARGET" CSS "SELECTOR" "ATTRIBUTE" [INDEX / Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
-PARSE "TARGET" JSON "FIELD" [Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
+PARSE "TARGET" JSON "FIELD" [JTokenParsing?] [Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
PARSE "TARGET" REGEX "REGEX" "OUTPUT" [Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
Examples:
diff --git a/OpenBullet/Pages/StackerBlocks/PageBlockParse.xaml b/OpenBullet/Pages/StackerBlocks/PageBlockParse.xaml
index bf2643d..19a929c 100644
--- a/OpenBullet/Pages/StackerBlocks/PageBlockParse.xaml
+++ b/OpenBullet/Pages/StackerBlocks/PageBlockParse.xaml
@@ -125,6 +125,7 @@
+
diff --git a/OpenBullet/SyntaxHelper.xml b/OpenBullet/SyntaxHelper.xml
index 33d0aee..e517958 100644
--- a/OpenBullet/SyntaxHelper.xml
+++ b/OpenBullet/SyntaxHelper.xml
@@ -30,7 +30,7 @@ CAPTCHA "URL" [Base64?] [SendScreenshot?] -> VAR "NAME"
-
PARSE "TARGET" LR "LEFT" "RIGHT" [Recursive?] [EncodeOutput?] [CreateEmpty?] [UseRegexLR?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
PARSE "TARGET" CSS "SELECTOR" "ATTRIBUTE" [INDEX / Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
-PARSE "TARGET" JSON "FIELD" [Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
+PARSE "TARGET" JSON "FIELD" [JTokenParsing?] [Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
PARSE "TARGET" REGEX "REGEX" "OUTPUT" [Recursive?] [EncodeOutput?] [CreateEmpty?] -> VAR/CAP "NAME" ["PREFIX" "SUFFIX"]
-
diff --git a/RuriLib/Blocks/BlockParse.cs b/RuriLib/Blocks/BlockParse.cs
index 84ec5db..21570c6 100644
--- a/RuriLib/Blocks/BlockParse.cs
+++ b/RuriLib/Blocks/BlockParse.cs
@@ -103,6 +103,10 @@ namespace RuriLib
private string jsonField = "";
/// The name of the json field for which we want to retrieve the value.
public string JsonField { get { return jsonField; } set { jsonField = value; OnPropertyChanged(); } }
+
+ private bool jTokenParsing = false;
+ /// Whether to parse the json object using jtoken paths.
+ public bool JTokenParsing { get { return jTokenParsing; } set { jTokenParsing = value; OnPropertyChanged(); } }
#endregion
#region REGEX
@@ -239,6 +243,7 @@ namespace RuriLib
case ParseType.JSON:
writer
.Literal(JsonField)
+ .Boolean(JTokenParsing, "JTokenParsing")
.Boolean(Recursive, "Recursive")
.Boolean(EncodeOutput, "EncodeOutput")
.Boolean(CreateEmpty, "CreateEmpty");
@@ -428,11 +433,21 @@ namespace RuriLib
break;
case ParseType.JSON:
- var jsonlist = new List>();
- parseJSON("", original, jsonlist);
- foreach(var j in jsonlist)
- if (j.Key == ReplaceValues(jsonField, data))
- list.Add(j.Value);
+ if (JTokenParsing)
+ {
+ JObject json = JObject.Parse(original);
+ var jsonlist = json.SelectTokens(jsonField, false);
+ foreach (var j in jsonlist)
+ list.Add(j.ToString());
+ }
+ else
+ {
+ var jsonlist = new List>();
+ parseJSON("", original, jsonlist);
+ foreach (var j in jsonlist)
+ if (j.Key == ReplaceValues(jsonField, data))
+ list.Add(j.Value);
+ }
break;