在JSON和PHP中处理数组时出现问题

在JSON和PHP中处理数组时出现问题,php,json,Php,Json,我将此数据保存在JSON中: "sentences_tone": [ { "sentence_id": 0, "text": "I hate these new features On #ThisPhone after the update.", "tones": [ { "score": 0.637279, "tone_id": "anger", "tone_name": "Anger" } ] },... 在PHP中显示结

我将此数据保存在JSON中:

"sentences_tone": [
{
  "sentence_id": 0,
  "text": "I hate these new features On #ThisPhone after the update.",
  "tones": [
    {
      "score": 0.637279,
      "tone_id": "anger",
      "tone_name": "Anger"
    }
  ]
},...
在PHP中显示结果时,出现以下错误:

英勇:0.931034 感伤:雷瓦 这是不可原谅的。 注意:第28行的未定义偏移量:2 in/Applications/XAMPP/xamppfiles/htdocs/toneAnalyzer/test.php

代码是:

$result=curl_exec ($ch);
curl_close ($ch);
$jsonObj = json_decode($result, true);
$i = 0; 
foreach($jsonObj["sentences_tone"] as $value){
    echo 'valor: '.$value['tones'][$i]['score'];
    echo 'sentimento: '.$value['tones'][$i]['tone_name'];
    echo 'texto: '.$value['text'];
    $i++;
};

正如Sorix在评论中所说的,但最好的猜测是您面临的问题是您的循环,您有以下几点:

foreach($jsonObj["sentences_tone"] as $value){
    echo 'valor: '.$value['tones'][$i]['score'];
    echo 'sentimento: '.$value['tones'][$i]['tone_name'];
    echo 'texto: '.$value['text'];
    $i++;
};
foreach($jsonObj["sentences_tone"] as $value){
    echo 'valor: '.$value['tones']['score'];
    echo 'sentimento: '.$value['tones']['tone_name'];
    echo 'texto: '.$value['text'];
};
从你的数据来看,我们可以看到它是这样的

sentences_tone
    tones
        tone data
这意味着使用您已经使用的格式将无法工作,因为音调数据上没有整数索引,因此您只需从循环中删除[$i]即可获得以下内容:

foreach($jsonObj["sentences_tone"] as $value){
    echo 'valor: '.$value['tones'][$i]['score'];
    echo 'sentimento: '.$value['tones'][$i]['tone_name'];
    echo 'texto: '.$value['text'];
    $i++;
};
foreach($jsonObj["sentences_tone"] as $value){
    echo 'valor: '.$value['tones']['score'];
    echo 'sentimento: '.$value['tones']['tone_name'];
    echo 'texto: '.$value['text'];
};
使用$i意味着它正在寻找

sentences_tone
    tones
        0
            tone data
        1
            tone data
        2
            tone data
这在你的数据中根本不存在


您也可以删除$i变量上的声明和增量

请用英语书写,它表明您在第28行有一个未定义的偏移量。我不知道第28行是什么,但如果我猜的话,我会说它是这两行中的一行:echo'valor:'。$value['tones'][$I]['score'];或者呼应“感伤:”.$value['tones'][$i]['tone_name'];。这是因为你的$value['tones']没有索引2,所以你的数组是shorter@MonkeyZeus,我认为葡萄牙语版本更合适:@Sorix感谢您提供链接,tones是一个对象数组,因此索引$I不会造成问题。产生错误的原因是,对于句子中的每个对象,$i递增,然后在tones数组中使用。如果音调不总是大小为1的数组,则应以不同的方式循环索引。