<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Extracting topic data from JSON topic received from AWS broker (using nRF9160dk)</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/86336/extracting-topic-data-from-json-topic-received-from-aws-broker-using-nrf9160dk</link><description>Hi 
 
 I am using nRF9160dk board. 
 I started with the aws_iot example, compiling it within VS Code. 
 I set up my board as a ‘thing’ in Amazon’s AWS, along with policy, certificates etc. 
 
 I will explain an issue I am having, however I will probably</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 31 Mar 2022 08:06:22 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/86336/extracting-topic-data-from-json-topic-received-from-aws-broker-using-nrf9160dk" /><item><title>RE: Extracting topic data from JSON topic received from AWS broker (using nRF9160dk)</title><link>https://devzone.nordicsemi.com/thread/360939?ContentTypeID=1</link><pubDate>Thu, 31 Mar 2022 08:06:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c8a54571-6318-4ea0-bc12-8466e103805d</guid><dc:creator>garrettb</dc:creator><description>&lt;p&gt;Thank you Dejan&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You are correct - and I got it working.&lt;/p&gt;
&lt;p&gt;Below is an example of how it worked for me.&lt;/p&gt;
&lt;p&gt;Again, this is rough and ready - just trying to get the concept etc.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;	cJSON *objState;
	cJSON *objDesired;
	cJSON *objBatval;
	cJSON *json_parsed = cJSON_Parse(str);

	objState = cJSON_GetObjectItemCaseSensitive(json_parsed, &amp;quot;state&amp;quot;);
	if (objState == NULL)
	{
		printk(&amp;quot;\n3a objState is null&amp;quot;);
	} else {
		str2 = cJSON_Print(objState);
		json_parsed = cJSON_Parse(str2);
		objDesired = cJSON_GetObjectItemCaseSensitive(json_parsed, &amp;quot;desired&amp;quot;);
		if (objDesired == NULL)
		{
			printk(&amp;quot;\n3b objDesired is null&amp;quot;);
		} else {
			str2 = cJSON_Print(objDesired);
			json_parsed = cJSON_Parse(str2);
			objBatval = cJSON_GetObjectItemCaseSensitive(json_parsed, &amp;quot;batv&amp;quot;);
			if (objBatval == NULL)
			{
				printk(&amp;quot;\n3c objBatval is null&amp;quot;);
			} else {
				printk(&amp;quot;\n3d objBatval is NOT null&amp;quot;);
				str2 = cJSON_Print(objBatval);
				printk(&amp;quot;\n3e ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);
				printk(&amp;quot;objBatval: %s\n&amp;quot;, str2);
				printk(&amp;quot;\n3f ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);
			}
		}
	}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Regards&lt;/p&gt;
&lt;p&gt;Garrett&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extracting topic data from JSON topic received from AWS broker (using nRF9160dk)</title><link>https://devzone.nordicsemi.com/thread/360776?ContentTypeID=1</link><pubDate>Wed, 30 Mar 2022 11:01:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:294fb9e0-346c-4262-9d94-12dea0e0f5f3</guid><dc:creator>dejans</dc:creator><description>&lt;p&gt;Hi,&lt;br /&gt;&lt;br /&gt;Currently, you are accessing batv at the root level. Based on your structure, batv cannot be read directly (as if it is in the root level) because it is nested inside &amp;quot;state&amp;quot; and &amp;quot;desired&amp;quot;. &lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Dejan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extracting topic data from JSON topic received from AWS broker (using nRF9160dk)</title><link>https://devzone.nordicsemi.com/thread/360608?ContentTypeID=1</link><pubDate>Tue, 29 Mar 2022 15:49:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:dc3e2cda-1db1-470e-b319-2d94ffcf5737</guid><dc:creator>garrettb</dc:creator><description>&lt;p&gt;Hi Dejan&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks for the suggestion.&lt;/p&gt;
&lt;p&gt;I have been going around in circles with this :)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is what I have at the moment - it&amp;#39;s a bit messy as I have been adding a lot of debug feedback etc.&lt;/p&gt;
&lt;p&gt;For some reason, it doesn&amp;#39;t seem to extract the &amp;quot;batv&amp;quot; value&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Code:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;static void print_received_data(const char *buf, const char *topic,
				size_t topic_len)
{
	char *str = NULL;
	cJSON *root_obj = NULL;
		
	printk(&amp;quot;\n. . . . . . . . \n&amp;quot;);
	printk(&amp;quot;print_received_data&amp;quot;);
	printk(&amp;quot;\n. . . . . . . . \n&amp;quot;);
	printk(&amp;quot;Received buffer: \n%s\n&amp;quot;, buf);
	printk(&amp;quot;Received topic: \n%s\n&amp;quot;, topic);
	printk(&amp;quot;Received topic len: \n%d&amp;quot;, topic_len);
	printk(&amp;quot;\n. . . . . . . . \n&amp;quot;);

	printk(&amp;quot;\n1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);
	root_obj = cJSON_Parse(buf);
	if (root_obj == NULL) {
		printk(&amp;quot;cJSON Parse failure&amp;quot;);
		return;
	}

	printk(&amp;quot;\n2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);
	str = cJSON_Print(root_obj);
	if (str == NULL) {
		printk(&amp;quot;Failed to print JSON object&amp;quot;);
		goto clean_exit;
	}
	printk(&amp;quot;\n3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);

	cJSON *batval;
	cJSON *json_parsed = cJSON_Parse(str);
	batval = cJSON_GetObjectItemCaseSensitive(json_parsed, &amp;quot;batv&amp;quot;);
	if (batval == NULL)
	{
		printk(&amp;quot;\n3a bat_val is null&amp;quot;);
	} else {
		char *str2 = cJSON_Print(batval);
		printk(&amp;quot;\n3b ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);
		printk(&amp;quot;batval: %s\n&amp;quot;, str2);
		printk(&amp;quot;\n3c ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);

	}
	printk(&amp;quot;\n4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&amp;quot;);

&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Output on the terminal:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;. . . . . . . . 
print_received_data
. . . . . . . . 
Received buffer: 
{&amp;quot;state&amp;quot;:{&amp;quot;desired&amp;quot;:{&amp;quot;dbg&amp;quot;:444,&amp;quot;batv&amp;quot;:445,&amp;quot;dbgStr&amp;quot;:&amp;quot;apples&amp;quot;},&amp;quot;reported&amp;quot;:{&amp;quot;app_version&amp;quot;:&amp;quot;v1.0.0&amp;quot;,&amp;quot;batv&amp;quot;:5019,&amp;quot;ts&amp;quot;:69521,&amp;quot;dbg&amp;quot;:0,&amp;quot;dbgStr&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;delta&amp;quot;:{&amp;quot;dbg&amp;quot;:444,&amp;quot;batv&amp;quot;:445,&amp;quot;dbgStr&amp;quot;:&amp;quot;apples&amp;quot;}},&amp;quot;metadata&amp;quot;:{&amp;quot;desired&amp;quot;:{&amp;quot;dbg&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648562859},&amp;quot;batv&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648562859},&amp;quot;dbgStr&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648562859}},&amp;quot;reported&amp;quot;:{&amp;quot;app_version&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648567600},&amp;quot;batv&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648567659},&amp;quot;ts&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648567659},&amp;quot;dbg&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648567659},&amp;quot;dbgStr&amp;quot;:{&amp;quot;timestamp&amp;quot;:1648567659}}},&amp;quot;version&amp;quot;:2102,&amp;quot;timestamp&amp;quot;:1648567687}
Received topic: 
$aws/things/my-nRF9160dk_thing01/shadow/get/accepted
Received topic len: 
57
. . . . . . . . 

1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3a bat_val is null
4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extracting topic data from JSON topic received from AWS broker (using nRF9160dk)</title><link>https://devzone.nordicsemi.com/thread/360567?ContentTypeID=1</link><pubDate>Tue, 29 Mar 2022 13:36:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:aebdd418-0d8f-4d57-8552-13ecc5c8d1c6</guid><dc:creator>dejans</dc:creator><description>&lt;p&gt;Hi, &lt;br /&gt;&lt;br /&gt;Could you try replacing the line &lt;br /&gt;&lt;em&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;batVal = cJSON_GetObjectItemCaseSensitive(root_obj, &amp;quot;batv&amp;quot;);&lt;/pre&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;with the following 2 lines&lt;em&gt; &lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;cJSON *json_parsed = cJSON_Parse(str);
batVal = cJSON_GetObjectItemCaseSensitive(json_parsed, &amp;quot;batv&amp;quot;);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You could then print with&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;char *str2 = cJSON_Print(batVal);
printk(&amp;quot;batVal: %s\n&amp;quot;, str2);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Dejan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>