{"id":12871,"date":"2020-11-24T10:37:59","date_gmt":"2020-11-24T18:37:59","guid":{"rendered":"https:\/\/origin-www.parsons.com\/?p=12871"},"modified":"2020-11-24T11:06:08","modified_gmt":"2020-11-24T19:06:08","slug":"rapid-prototyping-real-world-example-part-3","status":"publish","type":"post","link":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/","title":{"rendered":"Rapid Prototyping \u2013 Real World Example (Part 3)"},"content":{"rendered":"\n
\"\"<\/figure>\n\n\n\n

Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see what it contains easier? Have you considered a prototype to help you review JSON data?<\/p>\n\n\n\n

JSON is good for transferring data between systems, it contains the schema and the data all in one making it easy for it to be ingested by the receiving system. It is not, however, as easy to digest in this format for human users, especially if there is no whitespace. That\u2019s where a simple prototype, like the one we\u2019ll walkthrough below, is useful. If an analyst comes across a cyber threat report in JSON format, they can more easily digest the information if it\u2019s in a table format. Adding sorting and filtering will make it easier for analysts to find the exact data they need in less time. Once the analyst determines the data is useful, then they can help make decisions to evaluate the rest of the data feed, or to production, the use of the data feed with their current workflow.<\/p>\n\n\n\n

Let\u2019s walk through a quick prototyping example that in the end will allow us to quickly evaluate a cyber threat report JSON bob.<\/p>\n\n\n\n

Step 1 \u2013 Quick Review And Prioritization Of The Requirements<\/strong><\/h3>\n\n\n\n

Let\u2019s quickly consider what the customer really wants out of this prototype. They want something that will make the JSON blob easy to quickly search and digest information from. I\u2019m going to be starting with a JSON blob, which is, by definition, JavaScript Object Notation, so let\u2019s consider writing something using JavaScript. This way anyone with a browser can also use this prototype. It also won\u2019t be connected to a server, which will make it even more flexible and usable.<\/p>\n\n\n\n

Step 2 \u2013 Check If Something Already Exists<\/strong><\/h3>\n\n\n\n

Now that I\u2019ve determined that JavaScript is probably the best option here, I\u2019ll do a quick search. Prettify has become a term used by developers who wish to print something that has usually been minimized in an easier to read format. This usually means adding whitespace, newlines, and even color to the printed text. With this knowledge, my search will be \u201cjson javascript pretty\u201d. One of the top results is from Stackoverflow, pretty-print JSON using Javascript<\/a>. Here I can see that JavaScript has a built-in function, JSON.stringify(). This is basically JavaScript\u2019s JSON prettify function but won\u2019t provide any sorting or filter and if the blob is more complicated with more levels or very large, it will still take time to review the JSON to search for specific data.<\/p>\n\n\n\n

Step 3 \u2013 Evaluate Existing Solution<\/strong><\/h3>\n\n\n\n

Let\u2019s keep looking through a few of the other responses. Looks like someone has already developed a JSON report script called HTML5ReportFormat<\/a>. Let\u2019s look at see if it fits our needs. At first glance, it\u2019s close, maybe even more than what I was originally thinking. It definitely betmgm live dealer gamemakes digesting JSON easier and it includes sorting. Let\u2019s take a closer look. My first issue is that the JSON blob used is statically defined. While we could replace the JSON in the script then reload the page, that doesn\u2019t make it useable for other than developers. I want something easy for anyone to use.<\/p>\n\n\n\n

Step 4 \u2013 Modify Existing Solution<\/strong><\/h3>\n\n\n\n

Starting from the existing HTML5ReportFormat<\/a> script, I\u2019m going to enhance it a bit for usability. First, I\u2019m going to add a textarea. This will allow users to paste a JSON blob onto the page and dynamically load a new report. After that, we\u2019ll need a button to submit the JSON for report processing. Simple enough, now I have this:<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

Now the button needs to do something. This is where we must dig into the code to figure out how the report is generated. There are only a few lines of code that are not already wrapped in a function that follows the line of the statically set JSON model variable. I\u2019ll start by wrapping those lines (323-329) in a new function so I can call it when the user clicks the new button. The function will look like:<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

Then I add the call to newModel() from the button I added earlier so my HTML code now looks like this:<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

Remember this is just a prototype, so I\u2019m not worried about the size of my textarea or adding any fancy CSS to my button at this time. My main concern right now is making a functional prototype that meets the prioritized requirements.<\/p>\n\n\n\n

Step 5 \u2013 Test<\/strong><\/h3>\n\n\n\n

Before delivering this solution, I want to do some basic testing to ensure it will do what I tell the user it will do. I do another search for some examples using \u201cjson api\u201d this gives me example outputs from JSON REST services. The first result happens to be from jsonapi.org<\/a>. Pasting that example into my textarea works as expected. I try a few more of the various complexities and everything seems to be working as expected until I come across an API for NY Times bestsellers. Their API requires a key, which I don\u2019t have, but they provide example outputs and that is all I need right now. Using the example here<\/a>, nothing happens when I paste it into the textarea and click the Generate Report button.<\/p>\n\n\n\n

Step 6 \u2013 Troubleshoot, Adjust, Test, Repeat<\/strong><\/h3>\n\n\n\n

Time to do some quick troubleshooting. I open the browser\u2019s developer debugger console and quickly see that JSON.parse is throwing an error. That\u2019s a pretty easy fix, I can just wrap the code in a try\/catch statement. Then to give the user some feedback, I\u2019ll alert the user to the error. The error is somewhat helpful as it will tell you where the format error is. Might be less useful for larger unformatted JSON blobs, but this will work for now.<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

Now my function looks like this:<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

So far so good, but one of our original priority requirements was filtering. Let\u2019s add that now. First, we\u2019ll add an input text field and button.<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

Again, we\u2019ll have to dive into the code to figure out the best place to apply a filter. There\u2019s already a sort feature, so we will see if we can modify that. Looks like the code uses an anonymous function:<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n

Most of that function does have to do with sorting, and I don\u2019t see a good place to add in filtering. The last line does reference makeRows(), let\u2019s take a look at that. Yes, this seems to be where the code is building the HTML for the table rows. We\u2019ll be able to apply a filter in makeRows() while building each <tr>. By adding BetMGM login appthe filter and hide variables, our modified makeRows() function ends up looking like this:<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

If you read through the code, you\u2019ll notice I also applied a bonus feature of highlighting the text the user filtered on. Troubleshoot, adjust, test, repeat. Filtering and highlighting seem to be working as expected.<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

Step 7 \u2013 Validate Solution<\/strong><\/h3>\n\n\n\n

Now we can test using more relevant JSON blobs, such as a cyber threat report, example JSON blobs can be found here<\/a>. While these JSON blobs are formatted nicely, it\u2019s still a bit to get through the data. What we can now do is copy the JSON for the PoisionIvy report and paste it into our modified HTML5ReportFormat. Now we have a sortable list and quickly see the different types of objects included (malware, identity, campaign, attack-pattern, course-of-action, indicator, vulnerability, report, and relationship).<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

A quick scroll through this report also tells us this actor is taking advantage of 6 different CVEs, their actions cover the initial-compromise phase of the Mandiant-attack-lifecycle-model with a spear-phishing campaign, and the malware associated with this report is a remote access tool (RAT).<\/p>\n\n\n\n

\"\"<\/figure><\/div>\n\n\n\n
\"\"<\/figure>\n\n\n\n

Step 8 \u2013 Deliver Prototype, Solicit Feedback<\/strong><\/h3>\n\n\n\n

At this point, my prototype is at a good starting point. I can deliver this prototype to the customer as a first pass as it is functional and provides value. The customer can use this prototype to view the structure of the data to see if the data is providing them the information they need or expect. From here I can also start collecting some feedback and additional requirements for future iterations of the prototype.<\/p>\n\n\n\n

As a developer, I can also use this prototype when evaluating APIs to ensure I\u2019m pulling the expected data. For example this<\/a> JSON of Nobel Prize winners. If I were looking for how the JSON represented non-award years for certain prizes, using the sort feature, our HTML5ReportFormat would be able to quickly show us that the Laureates field is missing, and we\u2019ll find the information in the Overall Motivation field. This data set also shows us the sort feature doesn\u2019t work perfectly, so I\u2019ll add that to my future requirements list to perfect. After sorting, we get enough information to now filter on the phrase \u201cNo Nobel Prize\u201d to get a list of just the years and categories where no award was given. We can also quickly count the number of times there has been no award (49 times across 5 different categories).<\/p>\n\n\n\n

I imagine some of the feedback will include a desire for changing the background color of every other table row for easier reading, and if larger JSON blobs are being used, pagination might be a future request. Some additional features which would enhance this prototype would be to highlight where the error in the malformed JSON is and allowing users to provide a URL to grab JSON from instead of requiring them to cut\/paste JSON. These additions can be done later using the evolutionary style of prototype delivery discussed in part one of this series.<\/p>\n\n\n\n

Customer Benefits<\/strong><\/h3>\n\n\n\n

Besides allowing the customer to quickly review raw JSON, other benefits in using a rapid prototyping solution, in this case, include providing a quick solution for the customer, cheaply. A prototype like this takes less than a day\u2019s effort, maybe even only an hour or two. This prototype is also very portable, it can be used on a disconnected system, it doesn\u2019t need access to a server, or the internet and it betmgm live casinotakes little to no spin-up time for users to start the tool.<\/p>\n\n\n\n

We can also use this prototype for gathering additional requirements for a larger system. Maybe the customer has a production application that they want this functionality built into, but it takes time and a lot more engineering of the solution to get new functionality added without affecting the rest of the production application. Providing this quick solution allows the customer to get the functionality they need now and validate the need while they wait for their main tool to be updated. Then this cheap solution can be thrown away in favor of the more permanent solution.<\/p>\n\n\n\n

In our three-part series on Rapid Prototyping, we looked at why rapid prototyping solutions are used and the benefits to the customer, such as meeting time-sensitive needs or addressing evolving requirements. In part two we talked about how to level-up your rapid prototyping skills by broadening your skill and tool sets. In part three we walked you through a real-world example using what we discussed in parts one and two.<\/p>\n\n\n\n

<\/span>
About The Author<\/h5>

Christie C. has over 15 years\u2019 experience developing and engineering software solutions, most of which have been with Parsons supporting the U.S. Department of Defense. Currently Christie is the Chief Engineer for a program which provides rapid prototypes and analytics for cybersecurity operations.<\/p><\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"

Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see what […]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"12804,12806,11684,12308,16405,9857","_relevanssi_noindex_reason":"","footnotes":""},"categories":[7663],"tags":[],"class_list":["post-12871","post","type-post","status-publish","format-standard","hentry","category-cyber"],"yoast_head":"\nRapid Prototyping \u2013 Real World Example (Part 3)<\/title>\n<meta name=\"description\" content=\"Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rapid Prototyping \u2013 Real World Example (Part 3)\" \/>\n<meta property=\"og:description\" content=\"Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Parsons Corporation\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/parsonscorporation\" \/>\n<meta property=\"article:published_time\" content=\"2020-11-24T18:37:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-11-24T19:06:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.parsons.com\/wp-content\/uploads\/2020\/02\/parsons-logo-for-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"684\" \/>\n\t<meta property=\"og:image:height\" content=\"353\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Theresa Wederman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@parsonscorp\" \/>\n<meta name=\"twitter:site\" content=\"@parsonscorp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Theresa Wederman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\"},\"author\":{\"name\":\"Theresa Wederman\",\"@id\":\"https:\/\/www.parsons.com\/#\/schema\/person\/ffd34de8b6b2440a671ee6cbf6676c5f\"},\"headline\":\"Rapid Prototyping \u2013 Real World Example (Part 3)\",\"datePublished\":\"2020-11-24T18:37:59+00:00\",\"dateModified\":\"2020-11-24T19:06:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\"},\"wordCount\":1946,\"publisher\":{\"@id\":\"https:\/\/www.parsons.com\/#organization\"},\"articleSection\":[\"Cyber\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\",\"url\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\"betmgm online live casino,\"name\":\"Rapid Prototyping \u2013 Real World Example (Part 3)\",\"isPartOf\":{\"@id\":\"https:\/\/www.parsons.com\/#website\"},\"datePublished\":\"2020-11-24T18:37:59+00:00\",\"dateModified\":\"2020-11-24T19:06:08+00:00\",\"description\":\"Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see\",\"breadcrumb\":{\"@id\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.parsons.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rapid Prototyping \u2013 Real World Example (Part 3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.parsons.com\/#website\",\"url\":\"https:\/\/www.parsons.com\/\",\"name\":\"Parsons Corporation\",\"description\":\"Infrastructure, Defense, Security, and Construction\",\"publisher\":{\"@id\":\"https:\/\/www.parsons.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.parsons.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.parsons.com\/#organization\",\"name\":\"Parsons Corporation\",\"url\":\"https:\/\/www.parsons.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.parsons.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.parsons.com\/wp-content\/uploads\/2020\/02\/parsons-logo-for-social.png\",\"contentUrl\":\"https:\/\/www.parsons.com\/wp-content\/uploads\/2020\/02\/parsons-logo-for-social.png\",\"width\":684,\"height\":353,\"caption\":\"Parsons Corporation\"},\"image\":{\"@id\":\"https:\/\/www.parsons.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/parsonscorporation\",\"https:\/\/x.com\/parsonscorp\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.parsons.com\/#\/schema\/person\/ffd34de8b6b2440a671ee6cbf6676c5f\",\"name\":\"Theresa Wederman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.parsons.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e75b9003608a0a78196a3423011a34c5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e75b9003608a0a78196a3423011a34c5?s=96&d=mm&r=g\",\"caption\":\"Theresa Wederman\"},\"url\":\"https:\/\/www.parsons.com\/author\/theresa-wederman\/\"}]}<\/script>\n","yoast_head_json":{"title":"Rapid Prototyping \u2013 Real World Example (Part 3)","description":"Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/","og_locale":"en_US","og_type":"article","og_title":"Rapid Prototyping \u2013 Real World Example (Part 3)","og_description":"Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see","og_url":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/","og_site_name":"Parsons Corporation","article_publisher":"https:\/\/www.facebook.com\/parsonscorporation","article_published_time":"2020-11-24T18:37:59+00:00","article_modified_time":"2020-11-24T19:06:08+00:00","og_image":[{"width":684,"height":353,"url":"https:\/\/www.parsons.com\/wp-content\/uploads\/2020\/02\/parsons-logo-for-social.png","type":"image\/png"}],"author":"Theresa Wederman","twitter_card":"summary_large_image","twitter_creator":"@parsonscorp","twitter_site":"@parsonscorp","twitter_misc":{"Written by":"Theresa Wederman","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/#article","isPartOf":{"@id":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/"},"author":{"name":"Theresa Wederman","@id":"https:\/\/www.parsons.com\/#\/schema\/person\/ffd34de8b6b2440a671ee6cbf6676c5f"},"headline":"Rapid Prototyping \u2013 Real World Example (Part 3)","datePublished":"2020-11-24T18:37:59+00:00","dateModified":"2020-11-24T19:06:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/"},"wordCount":1946,"publisher":{"@id":"https:\/\/www.parsons.com\/#organization"},"articleSection":["Cyber"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/","url":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/","name":"Rapid Prototyping \u2013 Real World Example (Part 3)","isPartOf":{"@id":"https:\/\/www.parsons.com\/#website"},"datePublished":"2020-11-24T18:37:59+00:00","dateModified":"2020-11-24T19:06:08+00:00","description":"Ever come across a blob of JSON and wondered if it contains the information you are looking for? Have you spent time adding white space so you could see","breadcrumb":{"@id":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.parsons.com\/2020\/11\/rapid-prototyping-real-world-example-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.parsons.com\/"},{"@type":"ListItem","position":2,"name":"Rapid Prototyping \u2013 Real World Example (Part 3)"}]},{"@type":"WebSite","@id":"https:\/\/www.parsons.com\/#website","url":"https:\/\/www.parsons.com\/","name":"Parsons Corporation","description":"Infrastructure, Defense, Security, and Construction","publisher":{"@id":"https:\/\/www.parsons.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.parsons.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.parsons.com\/#organization","name":"Parsons Corporation","url":"https:\/\/www.parsons.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.parsons.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.parsons.com\/wp-content\/uploads\/2020\/02\/parsons-logo-for-social.png","contentUrl":"https:\/\/www.parsons.com\/wp-content\/uploads\/2020\/02\/parsons-logo-for-social.png","width":684,"height":353,"caption":"Parsons Corporation"},"image":{"@id":"https:\/\/www.parsons.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/parsonscorporation","https:\/\/x.com\/parsonscorp"]},{"@type":"Person","@id":"https:\/\/www.parsons.com\/#\/schema\/person\/ffd34de8b6b2440a671ee6cbf6676c5f","name":"Theresa Wederman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.parsons.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e75b9003608a0a78196a3423011a34c5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e75b9003608a0a78196a3423011a34c5?s=96&d=mm&r=g","caption":"Theresa Wederman"},"url":"https:\/\/www.parsons.com\/author\/theresa-wederman\/"}]}},"_links":{"self":[{"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/posts\/12871"}],"collection":[{"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/comments?post=12871"}],"version-history":[{"count":0,"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/posts\/12871\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/media?parent=12871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/categories?post=12871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.parsons.com\/wp-json\/wp\/v2\/tags?post=12871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}