解析来自googlesheets的JSON响应

解析来自googlesheets的JSON响应,json,api,parsing,salesforce,apex,Json,Api,Parsing,Salesforce,Apex,我正在从事Salesforce CRM项目,在该项目中,我需要访问Google工作表中的值,扫描它们以查找特定的关键字,如果它们满足特定条件,则将给定行中的数据复制到Salesforce中的对象中 我正在使用GoogleSheetsAPI和Apex-Salesforce编程语言访问GoogleSheet的主体。 我遇到的问题是,我从GoogleSheets文件获得的每个数据行都是一个单独的JSON文件 正如您将在下面的示例中看到的,这些键仅位于第一个JSON文件中,随后的每个文件仅包含值 有没有

我正在从事Salesforce CRM项目,在该项目中,我需要访问Google工作表中的值,扫描它们以查找特定的关键字,如果它们满足特定条件,则将给定行中的数据复制到Salesforce中的对象中

我正在使用GoogleSheetsAPI和Apex-Salesforce编程语言访问GoogleSheet的主体。 我遇到的问题是,我从GoogleSheets文件获得的每个数据行都是一个单独的JSON文件

正如您将在下面的示例中看到的,这些键仅位于第一个JSON文件中,随后的每个文件仅包含值

有没有办法将包含值(从第二个值开始)的每个JSON文件与第一个文件中的键配对

下面是JSON响应的样子:

"range": "Angels!B2:AD2501",
  "majorDimension": "ROWS",
  "values": [
    [
      "Complete?",
      "Name",
      "ID :",
      "Source",
      "LinkedIn",
      "Twitter",
      "Profile",
      "",
      "AA Profile",
      "Email",
      "Location: City",
      "Location: Country",
      "Twitter Bio",
      "Bio",
      "Known For:",
      "Investments",
      "Preferred Industry",
      "Vertical",
      "Associated Venture Fund",
      "Type",
      "Total Investments",
      "Total Exits",
      "",
      "Priority",
      "Comments",
      "Email",
      "Contact Owner",
      "Account Owner",
      "In CRM"
    ],
    [
      "Yes",
      "John Doe",
      "2305",
      "CrowdSourced",
      "https://www.linkedin.com/in/someone-34738265",
      "",
      "",
      "",
      "https://angel.co/person",
      "",
      "Something",
      "UK",
      "",
      "Executive Manager",
      "Long term investor.",
      "list, of, companies, separated,by, a, comma",
      "IT, Advertising",
      "",
      "",
      "Person (individual)",
      "239",
      "16",
      "TRUE",
      "H"
    ],
    [
      "Yes",
      "A. Nikiforov",
      "766",
      "Pitchbook2",
      "https://www.linkedin.com/pub/dir/alexey/nikiforov",
      "",
      "https://my.pitchbook.com?i=106763-86",
      "",
      "",
      "gfm@polytechnics.spb.ru",
      "Saint Petersburg",
      "Russia",
      "",
      "Mr. A. Nikiforov is the Owner at Izdatelstvo Politekhnika. Mr. A. Nikiforov is the Owner at A. Nikiforov.",
      " ",
      "Izdatelstvo Politekhnika",
      "Media",
      "",
      "",
      "Angel (individual)",
      "1",
      "",
      "FALSE"
    ],
    [
      "Yes",
      "Aarish Patel",
      "1043",
      "Pitchbook2",
      "https://www.linkedin.com/in/aarish-patel-06387983",
      "",
      "https://my.pitchbook.com?i=151254-01",
      "",
      "",
      "",
      "",
      "",
      "",
      "Mr. Patel serves as the Non-Executive Director at Reds True Barbecue. He serves as the Angel Investor at Aarish Patel.",
      " ",
      "Reds True Barbecue",
      "Restaurants, Hotels and Leisure, Retail",
      "",
      "",
      "Angel (individual)",
      "1",
      "",
      "FALSE"
    ]];

您可以将json反序列化为Apex类,然后在数组中循环。结果是一个映射列表,其中键是列名,值是相关值

public class range {
  List<List<String>> values;
}
public static List<Map<String,String>> parseJSON(String jsonStringFromCallout){
  range r = (range)JSON.deserialize(jsonStringFromCallout,range.class);
  List<String> headers = range.values[0];
  List<Map<String,String>> allRows = new List<Map<String,String>>();
  for ( Integer i=1; i<range.values.size(); i++ ){
    Map<String,String> thisRow = new Map<String,String>();
    for ( Integer j=0; j<range.values[i].size(); j++ ){
      thisRow.put(headers[j],range.values[i][j]);
    }
    allRows.add(thisRow);
  }
  return allRows;
}
公共类范围{
列表值;
}
公共静态列表parseJSON(字符串jsonStringFromCallout){
range r=(range)JSON.deserialize(jsonStringFromCallout,range.class);
列表标题=范围值[0];
List allRows=新列表();

对于(Integer i=1;i,您可以将json反序列化为Apex类,然后在数组数组中循环。结果是一个映射列表,其中键是列名,值是相关值

public class range {
  List<List<String>> values;
}
public static List<Map<String,String>> parseJSON(String jsonStringFromCallout){
  range r = (range)JSON.deserialize(jsonStringFromCallout,range.class);
  List<String> headers = range.values[0];
  List<Map<String,String>> allRows = new List<Map<String,String>>();
  for ( Integer i=1; i<range.values.size(); i++ ){
    Map<String,String> thisRow = new Map<String,String>();
    for ( Integer j=0; j<range.values[i].size(); j++ ){
      thisRow.put(headers[j],range.values[i][j]);
    }
    allRows.add(thisRow);
  }
  return allRows;
}
公共类范围{
列表值;
}
公共静态列表parseJSON(字符串jsonStringFromCallout){
range r=(range)JSON.deserialize(jsonStringFromCallout,range.class);
列表标题=范围值[0];
List allRows=新列表();

对于(Integer i=1;iThank you Matt,上述方法可行,但现在我面临堆大小过大的问题(这是一个包含2500行数据的电子表格)。那太糟糕了,要弄清楚的是JSONString本身是否太大,或者代码的其他方面是否导致了异常。要测试的是注释掉部分代码并尝试使用更小的JSON文件。嘿,Matt,我就是这么做的。我将JSON拆分为更小的块,现在可以工作了。谢谢你的支持谢谢你的帮助,Matt,上面的方法很有效,但是现在我面临堆大小太大的问题(这是一个包含2500行数据的电子表格)。那太糟糕了,要弄清楚的是JSONString本身是否太大,或者代码的其他方面是否导致了异常。要测试的是注释掉部分代码并尝试使用更小的JSON文件。嘿,Matt,我就是这么做的。我将JSON拆分为更小的块,现在可以工作了。谢谢你的支持你在这件事上的所有帮助!