Skip to content

Commit 998fc58

Browse files
committed
Add missing code in Frame() for handling @list.
Fixes #5.
1 parent 143cbf3 commit 998fc58

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/JsonLD/Core/JsonLdApi.cs

+20-8
Original file line numberDiff line numberDiff line change
@@ -1412,7 +1412,7 @@ private void Frame(JsonLdApi.FramingContext state, JObject nodes
14121412
JObject matches = FilterNodes(state, nodes, frame);
14131413
// get flags for current frame
14141414
bool embedOn = GetFrameFlag(frame, "@embed", state.embed);
1415-
bool explicicOn = GetFrameFlag(frame, "@explicit", state.@explicit);
1415+
bool explicitOn = GetFrameFlag(frame, "@explicit", state.@explicit);
14161416
// add matches to output
14171417
JArray ids = new JArray(matches.GetKeys());
14181418
ids.SortInPlace();
@@ -1491,7 +1491,7 @@ private void Frame(JsonLdApi.FramingContext state, JObject nodes
14911491
if (!frame.ContainsKey(prop))
14921492
{
14931493
// if explicit is off, embed values
1494-
if (!explicicOn)
1494+
if (!explicitOn)
14951495
{
14961496
EmbedValues(state, element, prop, output);
14971497
}
@@ -1502,8 +1502,7 @@ private void Frame(JsonLdApi.FramingContext state, JObject nodes
15021502
foreach (JToken item in value)
15031503
{
15041504
// recurse into list
1505-
if ((item is JObject) && ((JObject)item).ContainsKey("@list"
1506-
))
1505+
if ((item is JObject) && ((JObject)item).ContainsKey("@list"))
15071506
{
15081507
// add empty list
15091508
JObject list = new JObject();
@@ -1763,8 +1762,7 @@ private static void AddFrameOutput(JsonLdApi.FramingContext state, JToken parent
17631762
{
17641763
if (parent is JObject)
17651764
{
1766-
JArray prop = (JArray)((JObject)parent)[property
1767-
];
1765+
JArray prop = (JArray)((JObject)parent)[property];
17681766
if (prop == null)
17691767
{
17701768
prop = new JArray();
@@ -1797,8 +1795,22 @@ private void EmbedValues(JsonLdApi.FramingContext state, JObject element, string
17971795
foreach (JToken o in objects)
17981796
{
17991797
var eachObj = o;
1800-
// handle subject reference
1801-
if (JsonLdUtils.IsNodeReference(eachObj))
1798+
1799+
if (eachObj is JObject && ((JObject)eachObj).ContainsKey("@list"))
1800+
{
1801+
JObject list = new JObject { { "@list", new JArray() } };
1802+
if (output is JArray)
1803+
{
1804+
((JArray)output).Add(list);
1805+
}
1806+
else
1807+
{
1808+
output[property] = new JArray(list);
1809+
}
1810+
EmbedValues(state, (JObject)eachObj, "@list", list["@list"]);
1811+
}
1812+
// handle subject reference
1813+
else if (JsonLdUtils.IsNodeReference(eachObj))
18021814
{
18031815
string sid = (string)((JObject)eachObj)["@id"];
18041816
// embed full subject if isn't already embedded

0 commit comments

Comments
 (0)