gpt4 book ai didi

dialogflow-es - 将 JSON 数组传递给fulfillmentText

转载 作者:行者123 更新时间:2023-12-04 10:28:04 24 4
gpt4 key购买 nike

我有一个看起来像这样的 JSON 对象数组......

JSONarray = 
[ { name: 'Steven' },
{ name: 'Clark' },
{ name: 'Kensington' } ]

关于对话流和谷歌助手,我需要发送一个看起来像这样的 webhook 响应......
"fulfillmentText": JSONarray}),
"fulfillmentMessages" : [
{
"text":
{"text": [JSONarray]
}
}
]}

我遇到的问题是这 block “fulfillmentText”:JSONarray。 'fulfillmentText' 是 Google Assistant 回读的部分,理想情况下我想让它回读三个名称中的每一个,但如果我只是传递数组,它会失败。有没有我可以构建让这种情况发生的JSON?

最佳答案

首先,一个小的语义点。那不是“JSON 数组”。它是一个 JavaScript 对象数组。 JSON 指的是这些对象的字符串表示(JavaScript Object Notation)。

这很重要,因为“fulfillmentText”需要一个字符串。您可以使用 JSON.stringify() 将 JavaScript 对象转换为字符串。方法,所以你会做类似的事情

const text = JSON.stringify( JSONarray );

但是,这可能不是您想要的,因为 Google 助理会将其读出为类似

Open bracket open brace quote name quote colon quote Steven quote close bracket, ...



等等。

相反,您可能应该编写一个函数来获取数组并将其转换为字符串。简单来说,您可以调用 join()只是名称的值。像这样的东西:
const names = JSONarray.map( o => o.name );  // Gets just an array of the names
const namesString = names.join(', '); // Joins them into a single string, separated by commas
const text = `The names are: ${namesString}`;

这更好,读出的内容类似于

The names are Steven, Clark, Kensington



但这并不是人们实际阅读(或听)名字的方式。我们希望它更像

The names are Steven, Clark, and Kensington



这很常见, multivocal包括一个基于字符串列表执行此操作的模板函数。因此,您的模板将类似于:
"The names are: {{Oxford names}}"

如果您不使用多声部,则可以使用以下方法:
/**
* Similar to Array.join(), but using rules for the Oxford comma.
* @param values The array to return joined values for
* @param sep1 The normal separator for each element (defaults to ", ")
* @param sep2 The separator before the final element (defaults to "and ")
* @returns {*}
*/
function oxford( values, sep1=", ", sep2="and " ){
if( !Array.isArray( values ) ){
return values;
} else if( values.length === 0 ){
return '';
} else if( values.length === 1 ){
return values[0];
} else if( values.length === 2 ){
return values[0]+' '+sep2+values[1];
}

var ret = '';

for( var co=0; co<values.length-1; co++ ){
ret += values[co]+sep1;
}
ret += sep2;
ret += values[values.length-1];

return ret;
};

const namesString = oxford( names );
const text = `The names are: ${namesString}`;

关于dialogflow-es - 将 JSON 数组传递给fulfillmentText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60550972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com