【问题标题】:How to convert array of srting with multiple same keys to JSON Object?如何将具有多个相同键的字符串数组转换为 JSON 对象?
【发布时间】:2021-06-09 20:46:42
【问题描述】:

我有一个从查询字符串中提取的数组,如下所示:

var arr = 'field1=12345&status=New&status=Assigned&status=In Progress&field2=2&field3=abc&feild4=10'

我需要将此数组转换为 JSON 对象。我正在使用以下代码:

    const arr = 'field1=12345&status=New&status=Assigned&status=In Progress&field2=2&field3=abc&feild4=10'

function arrayToObject(query) {
    const uri = decodeURIComponent(query);
    const chunks = uri.split('&');
    const params = {}
    var chunk = {}
    for (var i=0; i < chunks.length ; i++) {
        chunk = chunks[i].split('=');
        console.log(chunk)
        params[chunk[0]] = chunk[1];
        }

    return params;
}
const querySt = arrayToObject(decodedQueryString);
const qSt = JSON.stringify(querySt);

console.log(qSt)

我得到以下输出: {"feild1":"12345","status":"进行中","feild2":"2","feild3":"abc","feild4":"10"}

但我需要这样的输出: {"feild1":"12345","status"::["New", "Assigned", "In Progress"],"feild2":"2","feild3":"abc","feild4":" 10"}

谁能帮忙解决这个问题。

【问题讨论】:

    标签: javascript node.js arrays json api-gateway


    【解决方案1】:

    将字符串转换为URLSearchParams 对象。从对象中获取密钥,并通过Set 传递它们以获取唯一密钥。现在将键数组缩减为一个对象,并将URLSearchParams.get() 用于单值键,将URLSearchParams.getAll() 用于多值键(如status):

    const str = 'field1=12345&status=New&status=Assigned&status=In Progress&field2=2&field3=abc&feild4=10'
    
    const params = new URLSearchParams(str)
    
    const result = [...new Set([...params.keys()])]
      .reduce((acc, key) => {
        acc[key] = key === 'status' 
          ? params.getAll(key)
          : params.get(key)  
        
        return acc
      }, {})
    
    console.log(JSON.stringify(result))

    【讨论】:

      【解决方案2】:

      这将起作用:

      const arr = 'field1=12345&status=New&status=Assigned&status=In Progress&field2=2&field3=abc&feild4=10'
      
      function arrayToObject(query) {
          const uri = decodeURIComponent(query);
          const chunks = uri.split('&');
          const params = {}
          var chunk = {}
          for (var i=0; i < chunks.length ; i++) {
              chunk = chunks[i].split('=');
              console.log(chunk)
              if (params[chunk[0]]){
              params[chunk[0]] = Array.isArray(params[chunk[0]]) ? [...params[chunk[0]], chunk[1]] : [params[chunk[0]], chunk[1]];
              } else {
              params[chunk[0]] = chunk[1];
              }
              }
      
          return params;
      }
      const querySt = arrayToObject(arr);
      const qSt = JSON.stringify(querySt);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        相关资源
        最近更新 更多