Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 9
1

Не работают Format, ToString, as string в переменных типа object. Что делать?

01.08.2017, 15:20. Показов 1490. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Переменная после использования данных методов выдаёт значение System.Collections.Generic.Dictionary`2[System.String,System.Object]

Pascal
1
2
3
writeln(asa); //выдаёт значение нормально
var asas : string := format('{0}',asa);
writeln(asas); //выдаёт значение System.Collections.Generic.Dictionary`2[System.String,System.Object]
Pascal
1
2
3
writeln(asa); //выдаёт значение нормально
var asas : string := asa.ToString;
writeln(asas); //выдаёт значение System.Collections.Generic.Dictionary`2[System.String,System.Object]
Pascal
1
2
3
writeln(asa); //выдаёт значение нормально
var asas : string := asa as string;
writeln(asas); //выдаёт значение System.Collections.Generic.Dictionary`2[System.String,System.Object]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2017, 15:20
Ответы с готовыми решениями:

String/toString() format
var Id = 153; var number = "#" + Id; var dialogWindow = prompt("Press 'Ctrl+C' to copy id",...

System.Single.ToString(string format) окруляет число
Есть простой код: float d = -107479040f; string s = d.ToString("F7"); F7 как я понимаю это...

Не корректно работает форматирование строки при преобразовании DateTime.ToString(string format)
Добрый день! Имеется строка для форматирования даты в классе MainForm: public static string...

Вывести переменную типа string в консоль: Object reference not set to an instance of an object
Вот такой сабж. Пытаюсь вывести переменную типа стринг в консоль Сначала, как обычно for...

9
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
01.08.2017, 15:25 2
Если объект не может быть представлен в виде строки (например, кнопка в Windows Forms), то ToString (и все функции, использующие этот метод) выдают тип этого объекта. Нужно использовать методы, свойственные типу Dictionary, чтобы вытащить из объекта строку, которая нужна.
1
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 9
01.08.2017, 16:12  [ТС] 3
попробовал через Dictionary
Pascal
1
type Dic = Dictionary<string, object>;
Pascal
1
2
3
4
5
foreach var t in asa do
begin
var x := Dic(t);
WritelnFormat('{0}', x['snippet'])
end;
то же самое выдаёт System.Collections.Generic.Dictionary`2[System.String,System.Object]
0
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
01.08.2017, 17:10 4
Я имел ввиду прочие методы Dictionary. Например, получить нужный элемент, и затем вывести его, а не всю конструкцию.

Можно весь код? Проще, если известно, как получена структура.
0
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 9
01.08.2017, 18:02  [ТС] 5
Нашёл другой метод, но выдаёт ошибку: Ожидался класс-потомок или класс-предок
Pascal
1
type Dis = Dictionary<object, string>;
Pascal
1
var asas := ((asa as Dis) as string);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
01.08.2017, 18:37 6
megakott, как значение заносилось в asa? Нужно иметь точную копию твоего объекта, чтобы советовать, как вытащить из него информацию, а не заниматься столь любимым тут многими гаданием на кофейной гуще: "а попробуй вот так. Не вышло - тогда так попробуй. Или вот так"... Что за рулетка? Есть информация как получить объект - значит будет точный ответ, как изъять из него информацию. Нет - значит, зачем спрашивать, продолжай методом тыка.
0
0 / 0 / 0
Регистрация: 30.07.2017
Сообщений: 9
01.08.2017, 18:57  [ТС] 7
Хорошо, я отправлю весь код
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
 "kind": "youtube#channelListResponse",
 "etag": ""m2yskBQFythfE4irbTIeOgYYfBU/ZPV7KJzd0zSBRg5UVOzjDffb2rE"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {
   "kind": "youtube#channel",
   "etag": ""m2yskBQFythfE4irbTIeOgYYfBU/ePSlCE0y70EGPFRbrXMcJjmMoAQ"",
   "id": "UC9HFHxJYssvDhJJLQ--dSdg",
   "snippet": {
    "title": "Мегакот",
    "description": "Мегакот. Великий ютубер.\nПодпишитесь на канал Мегакот.",
    "customUrl": "megakott",
    "publishedAt": "2016-09-15T08:14:42.000Z",
    "thumbnails": {
     "default": {
      "url": "https://yt3.ggpht.com/-y9OnuYRBhQI/AAAAAAAAAAI/AAAAAAAAAAA/0osDtjY9lMY/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
     },
     "medium": {
      "url": "https://yt3.ggpht.com/-y9OnuYRBhQI/AAAAAAAAAAI/AAAAAAAAAAA/0osDtjY9lMY/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
     },
     "high": {
      "url": "https://yt3.ggpht.com/-y9OnuYRBhQI/AAAAAAAAAAI/AAAAAAAAAAA/0osDtjY9lMY/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
     }
    },
    "defaultLanguage": "ru",
    "localized": {
     "title": "Megakott Russia",
     "description": "Мегакот. Великий ютубер.\nПодпишитесь на канал Мегакот."
    },
    "country": "RU"
   }
  }
 ]
}
Pascal
1
2
3
4
5
6
7
8
9
10
11
procedure Form2.button2_Click(sender: Object; e: EventArgs);
type
  Dic = Dictionary<string, object>;
  ObjArr = array of object;
begin
  var jdata : string := ReadAllText('json.txt'); //json.txt см. выше, а откуда взят этот json.txt - это конфиденциальная информация
  var asa := ((jss.DeserializeObject(jdata) as Dic)['items'] as ObjArr);
  writeln(asa); //выдаёт значение нормально, десериализованное содержимое файла json.txt
  var asas := asa.ToString;
  writeln(asas) //выдаёт значение System.Collections.Generic.Dictionary`2[System.String,System.Object]
end;
Нужно достать значение items.snippet.title из файла json.txt
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
01.08.2017, 19:23 8
Для начала приведи валидный JSON, с которым программа на строке jss.DeserializeObject(jdata) не вылетает с ошибкой:
Program169.pas(10) : Ошибка времени выполнения: Invalid object passed in, ':' or '}' expected. (56): { "kind": "youtube#channelListResponse", "etag": ""m2yskBQFythfE4irbTIeOgYYfBU/ZPV7KJzd0zSBRg5UVOzjDffb2rE"", "pageInfo": { "totalResults": 1, "resultsPerPage": 1 }, "items": [ { "kind": "youtube#channel", "etag": ""m2yskBQFythfE4irbTIeOgYYfBU/ePSlCE0y70EGPFRbrXMcJjmMoAQ"", "id": "UC9HFHxJYssvDhJJLQ--dSdg", "snippet": { "title": "Мегакот", "description": "Мегакот. Великий ютубер.\nПодпишитесь на канал Мегакот.", "customUrl": "megakott", "publishedAt": "2016-09-15T08:14:42.000Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/-y9OnuYRBhQI/AAAAAAAAAAI/AAAAAAAAAAA/0osDtjY9lMY/s88-c-k-no-mo-rj-c0xffffff/photo.jpg" }, "medium": { "url": "https://yt3.ggpht.com/-y9OnuYRBhQI/AAAAAAAAAAI/AAAAAAAAAAA/0osDtjY9lMY/s240-c-k-no-mo-rj-c0xffffff/photo.jpg" }, "high": { "url": "https://yt3.ggpht.com/-y9OnuYRBhQI/AAAAAAAAAAI/AAAAAAAAAAA/0osDtjY9lMY/s240-c-k-no-mo-rj-c0xffffff/photo.jpg" } }, "defaultLanguage": "ru", "localized": { "title": "Megakott Russia", "description": "Мегакот. Великий ютубер.\nПодпишитесь на канал Мегакот." }, "country": "RU" } } ] }
, потом будем дальше разговаривать...
0
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
01.08.2017, 19:29 9
Лучший ответ Сообщение было отмечено megakott как решение

Решение

JSON отказывается сериализироваться, но, поработав с этим примером и изменив значения, получил вот эту функцию. При нормальном вводе должна работать.

Pascal
1
2
3
4
5
6
7
8
9
10
11
type
  Dic = Dictionary<string, object>;
  ObjArr = array of object;
begin
  var jdata : string := ReadAllText('json.txt');
  var asa := ((jss.DeserializeObject(jdata) as Dic)['items'] as ObjArr);
  writeln(asa);
  var asas:= asa[3] as Dic;
  var asasa:=asas['title'];
  writeln(asasa)
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32964 / 21280 / 8170
Регистрация: 22.10.2011
Сообщений: 36,550
Записей в блоге: 8
01.08.2017, 19:42 10
Лучший ответ Сообщение было отмечено volvo как решение

Решение

У тебя в JSON проблема с кавычками. Убрал дубли, записал текст в файл с кодировкой UTF8, и:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{$reference System.Web.Extensions.dll}
uses System.Collections.Generic, System.Web.Script.Serialization;
 
type
  Dic = Dictionary<string, object>;
  ObjArr = array of object;
 
begin
  var jdata: string := ReadAllText('json.txt', Encoding.UTF8);
  var jss := new JavaScriptSerializer();
  var asa := ((jss.DeserializeObject(jdata) as Dic)['items'] as ObjArr);
  foreach var t in asa do
  begin
    var x := Dic(t);
    if x.ContainsKey('snippet') then writeln(Dic(x['snippet'])['title'])
  end;
end.
Результат:
Миниатюры
Не работают Format, ToString, as string в переменных типа object. Что делать?  
1
01.08.2017, 19:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2017, 19:42
Помогаю со студенческими работами здесь

Разница между string.Concat(x,y) и x.ToString()+y.ToString()
Вроде как одно и то же, но дает разные результаты в операции поиска палиндромов. К примеру, взять...

Приведение типа от object к string
Доброго времени суток. Суть: Необходимо привести объект типа object к любому другому типу,...

Override toString с сохранением Custom Numeric Format Strings
Добрый день. Есть обычный класс, в котором я переопределяю метод toString, но хотелось бы сохранить...

Сравнение переменных типа string
Подскажите пожалуйста , почему при проверке строки : не пустая ли она , выдает сообщение ???? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru