将JSON转换为字符串,而不在字符串中包含属性名称

时间:2018-07-20 16:06:29

标签: javascript json

我想将JSON对象转换为字符串,但是如果使用JSON.stringify(),则输出字符串还将包含属性名称,这是我不想要的。

我可以通过遍历对象来实现此目的,但是我想要一个也适用于任何深度的嵌套对象的解决方案。

例如,如果我执行以下操作:

let myObject = {
  name: 'Bob',
  preferences: {
    color: 'red',
    food: 'pizza'
  }
};

console.log(JSON.stringify(myObject));

输出字符串将是:

{"name":"Bob","preferences":{"color":"red","food":"pizza"}}

我将如何获得以下信息?

{"Bob","red","pizza"}

2 个答案:

答案 0 :(得分:4)

使用递归并检查对象,如果不是对象,则推入结果

let myObject = {
  name: 'Bob',
  preferences: {
    color: 'red',
    food: 'pizza',
    children:{
      a: 'hi',
      b: {
        c: 'd'
      }
    }
  }
};


let res = [];

function goInto(obj){
   for(let key in obj){
      if(typeof obj[key] === 'object') {
        goInto(obj[key]);
         return;
      } else {
        res.push(obj[key])
      }
   }
}

goInto(myObject);
console.log(res);

答案 1 :(得分:3)

听起来像您需要了解Object.values方法。

  

Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环枚举了in ...原型链)。

这可用于快速有效地获取简单对象的值

let obj = {
  "key1":"val1",
  "key2":"val2",
  "key3":"val3"
}

console.log(Object.values(obj));

//loop to print as string
let objString = "";
Object.values(obj).forEach((val) => {
   objString = objString + " " + val
});
console.log(objString);

要实际打印为字符串或使用多维对象,您仍然需要以某种形式进行迭代。这是一个多维对象的示例。

let testObj = {
  "key1":"val1",
  "key2":"val2",
  "key3":{
    "nestedKey1":"nestedVal1",
    "nestedKey2":"nestedVal2"
   }
}

console.log(Object.values(testObj));

function listAsFlatString(obj){
   var returnVal = "";
   Object.values(obj).forEach((val) => {
     if(typeof val !== "object"){
        returnVal = returnVal + " " + val;
     } else {
        returnVal = returnVal + " " + listAsFlatString(val)
     }
  });
  return returnVal.trim();
}

console.log(listAsFlatString(testObj))