search

Home  >  Q&A  >  body text

Indexing nested JSON arrays

I have the following JSON example where under "results" there is an array containing two objects. It can contain hundreds of objects with the same key and different values ​​under the "results" array.

I do not have permission to change this JSON file.

{
  "results": [
    {
      "title": "Information Collection Requests; Direct Loan Servicing-Regular; and Servicing Minor Program Loans",
      "type": "Notice",
      "abstract": "In accordance with the Paperwork Reduction Act (PRA) requirement, the Farm Service Agency (FSA) is requesting comments from all interested individuals and organizations on a revision of two currently approved information collection requests, Direct Loan Servicing--Regular and Servicing Minor Program Loans, respectively. In the Direct Loan Servicing--Regular, the information is used to determine borrower compliance with loan agreements, assist the borrower in achieving business goals, and regular servicing of the loan account such as graduation, subordination, partial release, use of proceeds, and consent. In Servicing Minor Program Loans, the information collected is used to perform routine and special servicing actions for loans authorized and serviced under FSA's Minor Loan Program.",
      "document_number": "2023-05464",
      "html_url": "https://www.federalregister.gov/documents/2023/03/17/2023-05464/information-collection-requests-direct-loan-servicing-regular-and-servicing-minor-program-loans",
      "pdf_url": "https://www.govinfo.gov/content/pkg/FR-2023-03-17/pdf/2023-05464.pdf",
      "public_inspection_pdf_url": "https://public-inspection.federalregister.gov/2023-05464.pdf?1678970722",
      "publication_date": "2023-03-17",
      "agencies": [
        {
          "raw_name": "DEPARTMENT OF AGRICULTURE",
          "name": "Agriculture Department",
          "id": 12,
          "url": "https://www.federalregister.gov/agencies/agriculture-department",
          "json_url": "https://www.federalregister.gov/api/v1/agencies/12",
          "parent_id": null,
          "slug": "agriculture-department"
        },
        {
          "raw_name": "Farm Service Agency",
          "name": "Farm Service Agency",
          "id": 157,
          "url": "https://www.federalregister.gov/agencies/farm-service-agency",
          "json_url": "https://www.federalregister.gov/api/v1/agencies/157",
          "parent_id": 12,
          "slug": "farm-service-agency"
        }
      ],
      "excerpts": "In accordance with the Paperwork Reduction Act (PRA) requirement, the Farm Service Agency (FSA) is requesting comments from all interested individuals and organizations on a revision of two currently approved information collection requests, Direct..."
    },
    {
      "title": "Notice of Funding Opportunity for the Socially Disadvantaged Groups Grant for Fiscal Year 2023",
      "type": "Notice",
      "abstract": "This notice announces that the Rural Business-Cooperative Service (RBCS, Agency), a Rural Development (RD) agency of the United States Department of Agriculture (USDA), invites applications for grants under the Socially Disadvantaged Groups Grant (SDGG) program for Fiscal Year (FY) 2023. This notice is being issued to allow applicants sufficient time to leverage financing, prepare and submit their applications, and give the Agency time to process applications within FY 2023. A total of ,000,000 in grant funding will be available for FY 2023. Successful applications will be selected by the Agency for funding and subsequently awarded to the extent that funding may ultimately be made available through appropriations. All applicants are responsible for any expenses incurred in developing and submitting their applications.",
      "document_number": "2023-05441",
      "html_url": "https://www.federalregister.gov/documents/2023/03/17/2023-05441/notice-of-funding-opportunity-for-the-socially-disadvantaged-groups-grant-for-fiscal-year-2023",
      "pdf_url": "https://www.govinfo.gov/content/pkg/FR-2023-03-17/pdf/2023-05441.pdf",
      "public_inspection_pdf_url": "https://public-inspection.federalregister.gov/2023-05441.pdf?1678970718",
      "publication_date": "2023-03-17",
      "agencies": [
        {
          "raw_name": "DEPARTMENT OF AGRICULTURE",
          "name": "Agriculture Department",
          "id": 12,
          "url": "https://www.federalregister.gov/agencies/agriculture-department",
          "json_url": "https://www.federalregister.gov/api/v1/agencies/12",
          "parent_id": null,
          "slug": "agriculture-department"
        },
        {
          "raw_name": "Rural Business-Cooperative Service",
          "name": "Rural Business-Cooperative Service",
          "id": 456,
          "url": "https://www.federalregister.gov/agencies/rural-business-cooperative-service",
          "json_url": "https://www.federalregister.gov/api/v1/agencies/456",
          "parent_id": 12,
          "slug": "rural-business-cooperative-service"
        }
      ],
      "excerpts": "This notice announces that the Rural Business-Cooperative Service (RBCS, Agency), a Rural Development (RD) agency of the United States Department of Agriculture (USDA), invites applications for grants under the Socially Disadvantaged Groups Grant..."
    }
  ]
}

I have the following code to get and display the required value for each key in the array as shown below:

const xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
  const myArr = JSON.parse(this.responseText);

  let text = "";
  for (let i in myArr.results) {
    text += "<div class='fed-reg-container'><h2 class='title'>" + myArr.results[i].title + "</h2><p>" + myArr.results[i].type + "</p><p>" + myArr.results[i].agencies[0].raw_name + " Document # " + myArr.results[i].document_number + "</p><p>Posted on: " + myArr.results[i].publication_date + "</p><p>" + myArr.results[i].abstract + "</p><a class='fed-reg-button' href='" + myArr.results[i].html_url + "'>Read More</a></div>";
  }
  text += "";
  document.getElementById("demo").innerHTML = text;
};
xmlhttp.open(
  "GET",
  "https://www.federalregister.gov/api/v1/documents.json?conditions%5Bagencies%5D%5B%5D=agriculture-department&conditions%5Bagencies%5D%5B%5D=federal-highway-administration&conditions%5Bagencies%5D%5B%5D=fish-and-wildlife-service&conditions%5Bagencies%5D%5B%5D=forest-service&conditions%5Bagencies%5D%5B%5D=interior-department&conditions%5Bagencies%5D%5B%5D=international-boundary-and-water-commission-united-states-and-mexico&conditions%5Bagencies%5D%5B%5D=land-management-bureau&conditions%5Bagencies%5D%5B%5D=national-highway-traffic-safety-administration&conditions%5Bagencies%5D%5B%5D=national-park-service&conditions%5Bagencies%5D%5B%5D=reclamation-bureau&conditions%5Bagencies%5D%5B%5D=environmental-protection-agency&conditions%5Bagencies%5D%5B%5D=council-on-environmental-quality&conditions%5Bagencies%5D%5B%5D=safety-and-environmental-enforcement-bureau&conditions%5Bagencies%5D%5B%5D=environment-office-energy-department&conditions%5Bcomment_date%5D%5Bgte%5D=05%2F01%2F2023&conditions%5Bcomment_date%5D%5Blte%5D=01%2F01%2F2050&conditions%5Bterm%5D=arizona&conditions%5Btype%5D%5B%5D=RULE&conditions%5Btype%5D%5B%5D=PRORULE&conditions%5Btype%5D%5B%5D=NOTICE",
  true
);
xmlhttp.send();
.fed-reg-container {
  background-color: black;
  color: white;
  padding: 20px;
  margin: 20px 0;
}

.title {
  color: #fcb900;
}

.fed-reg-button {
  background-color: #fcb900;
  color: black;
  padding: 10px;
  display: block;
  max-width: 100px;
  text-align: center;
  font-weight: 600;
  text-decoration: none;
}
<!DOCTYPE html>
<html>

<body>
  <p id="demo"></p>

</body>

</html>

Everything is fine except one thing.

As you can see, my json has a nested array under "agencies" that contains multiple objects.

I'm trying to use indexing to get each value under the raw_name of each object.

If I use myArr.results[i].agencies[0].raw_name it works for a single object. May be [0] or [1].

When I try to get the second value (for example myArr.results[i].agencies[0].raw_name " - " myArr.results[i].agencies[1].raw_name, It breaks the entire code. I get nothing in return. Just a white page.

Any idea what I did wrong?

Thanks!

P粉311617763P粉311617763311 days ago498

reply all(1)I'll reply

  • P粉663883862

    P粉6638838622024-01-30 09:10:47

    Use nested loops to process all institutions. You can use map() to loop through them and return an array of names, and use join() to join them with delimiters.

    for (let i in myArr.results) {
        let agencies = myArr.results[i].agencies.map(a => a.raw_name).join(', ');
        text += "

    " + myArr.results[i].title + "

    " + myArr.results[i].type + "

    " + agencies + " Document # " + myArr.results[i].document_number + "

    Posted on: " + myArr.results[i].publication_date + "

    " + myArr.results[i].abstract + "

    Read More
    "; }

    reply
    0
  • Cancelreply