Heim  >  Fragen und Antworten  >  Hauptteil

Indizieren verschachtelter JSON-Arrays

Ich habe das folgende JSON-Beispiel, in dem "results" 下有一个数组,其中包含两个对象。它可以在 “results” Hunderte von Objekten mit demselben Schlüssel und unterschiedlichen Werten unter dem Array enthält.

Ich habe keine Berechtigung, diese JSON-Datei zu ändern.

{
  "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..."
    }
  ]
}

Ich habe den folgenden Code, um den erforderlichen Wert für jeden Schlüssel im Array abzurufen und anzuzeigen, wie unten gezeigt:

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>

Alles ist in Ordnung, bis auf eine Sache.

Wie Sie sehen können, hat mein JSON unter "agencies" ein verschachteltes Array, das mehrere Objekte enthält.

Ich versuche, die Indizierung zu verwenden, um jeden Wert unter raw_name für jedes Objekt abzurufen.

Wenn ich + myArr.results[i].agencies[0].raw_name 它适用于单个对象。可能是 [0][1] verwende.

Wenn ich versuche, den zweiten Wert wie + myArr.results[i].agencies[0].raw_name + " - " + myArr.results[i].agencies[1].raw_name zu bekommen, bekomme ich nichts zurück, nur eine weiße Seite

Irgendeine Idee, was ich falsch gemacht habe?

Danke!

P粉311617763P粉311617763263 Tage vor462

Antworte allen(1)Ich werde antworten

  • P粉663883862

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

    使用嵌套循环来处理所有机构。您可以使用 map() 循环它们并返回名称数组,并使用 join() 将它们与分隔符连接起来。

    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
    "; }

    Antwort
    0
  • StornierenAntwort