如何忽略JSON响应的引用?

时间:2018-05-25 21:58:40

标签: javascript json

我正在使用JSONstringify来获取我的react-native应用中的用户位置,但它也带有引号,因此<Text>City: {this.state.city}</Text>它返回City: "London"知道如何删除引号吗?

由于

3 个答案:

答案 0 :(得分:0)

这里有两个问题要回答:如何删除你得到的值的引号,这实际上是你的问题,以及你为什么要得到它们,因为你可能只需要修复其他东西来获得正确的值。

️如何删除字符串值周围的引号:

有很多方法可以删除字符串值周围的引号,或者实际上,删除任何第一个和最后一个字符的引号,无论它们是什么:

您可能需要查看What is the difference between String.slice and String.substring?

&#13;
&#13;
const city = '"London"';
const size = city.length;

// Most intuitive in my opinion:
console.log(city.slice(1, -1));

// Also ok:
console.log(city.substring(1, size - 1));

// Not so intuitive:
console.log(city.substr(1, size - 2));

// This will also match quotes that are not in the first or last position of the string:
console.log(city.replace(/"/g, ''));
&#13;
.as-console-wrapper {
  max-height: 100vh !important;
}
&#13;
&#13;
&#13;

为什么你会得到额外的引号?

使用JSON.stringifyJSON.parse时,通常会执行以下操作:

&#13;
&#13;
// On the server you would send something like this:

const responseSent = JSON.stringify({ data: { location: 'London' } });

console.log('JSON SENT =', responseSent);

// Then, on the client you would parse that:

try {
  const responseReceived = JSON.parse(responseSent);
  
  console.log('PARSED JSON =', responseReceived);
  console.log('PARSED VALUE =', responseReceived.data.location);
} catch (e) {
  // ...
}
&#13;
.as-console-wrapper {
  max-height: 100vh !important;
}
&#13;
&#13;
&#13;

所以你实际上并没有使用JSON.stringify来获取价值,而是发送它。如果您正在做这样的事情,那么这就是您获得这些额外报价的原因:

&#13;
&#13;
// On the server you might be sending something like this:

const responseSent1 = JSON.stringify({ data: { location: 'London' } });
const responseSent2 = JSON.stringify({ data: { location: JSON.stringify('London') } });

console.log('JSON SENT 1 =', responseSent1);
console.log('JSON SENT 2 =', responseSent2);

// Then, on the client you would parse that:

try {
  const responseReceived1 = JSON.parse(responseSent1);
  const responseReceived2 = JSON.parse(responseSent2);
  
  console.log('PARSED JSON 1 =', responseReceived1);
  console.log('PARSED JSON 2 =', responseReceived2);
  
  console.log('PARSED VALUE 1 =', JSON.stringify(responseReceived1.data.location));
  console.log('PARSED VALUE 2 =', responseReceived2.data.location);
} catch (e) {
  // ...
}
&#13;
.as-console-wrapper {
  max-height: 100vh !important;
}
&#13;
&#13;
&#13;

另外,请注意,您要对要发送的对象进行一次描述,而不是单个值,然后再将对象作为整体进行描述。

答案 1 :(得分:-1)

在第一个和最后一个位置删除引号的最简单方法:

const input1 = '"Some text"';
const input2 = '"Some "quoted" text"';

const removeQuotes = string => string.replace(/"(.+)"/g, "$1")

console.log(removeQuotes(input1)); // Some text
console.log(removeQuotes(input2)); // Some "quoted" text

在您的情况下,您可以像这样调用removeQuotes函数

<Text>City: {removeQuotes(this.state.city)}</Text>

答案 2 :(得分:-1)

如果您使用JSON.stringify()创建this.state.city,那么您应该使用JSON.parse()撤消它。

<Text>City: {JSON.parse(this.state.city)}</Text>

但你可能不应该首先使用JSON.stringify()。这应仅用于序列化整个对象,而不是用于单个属性。解析对象时,属性将包含有效数据。